Merge branch 'develop' into pizzax-indexeddb
This commit is contained in:
		
						commit
						8804f896b0
					
				
					 16 changed files with 188 additions and 236 deletions
				
			
		| 
						 | 
					@ -76,7 +76,6 @@
 | 
				
			||||||
		"abort-controller": "3.0.0",
 | 
							"abort-controller": "3.0.0",
 | 
				
			||||||
		"archiver": "5.3.0",
 | 
							"archiver": "5.3.0",
 | 
				
			||||||
		"autobind-decorator": "2.4.0",
 | 
							"autobind-decorator": "2.4.0",
 | 
				
			||||||
		"autosize": "4.0.4",
 | 
					 | 
				
			||||||
		"autwh": "0.1.0",
 | 
							"autwh": "0.1.0",
 | 
				
			||||||
		"aws-sdk": "2.1013.0",
 | 
							"aws-sdk": "2.1013.0",
 | 
				
			||||||
		"bcryptjs": "2.4.3",
 | 
							"bcryptjs": "2.4.3",
 | 
				
			||||||
| 
						 | 
					@ -91,7 +90,6 @@
 | 
				
			||||||
		"chartjs-adapter-date-fns": "2.0.0",
 | 
							"chartjs-adapter-date-fns": "2.0.0",
 | 
				
			||||||
		"chartjs-plugin-zoom": "1.1.1",
 | 
							"chartjs-plugin-zoom": "1.1.1",
 | 
				
			||||||
		"cli-highlight": "2.1.11",
 | 
							"cli-highlight": "2.1.11",
 | 
				
			||||||
		"compare-versions": "3.6.0",
 | 
					 | 
				
			||||||
		"content-disposition": "0.5.3",
 | 
							"content-disposition": "0.5.3",
 | 
				
			||||||
		"crc-32": "1.2.0",
 | 
							"crc-32": "1.2.0",
 | 
				
			||||||
		"css-loader": "6.5.1",
 | 
							"css-loader": "6.5.1",
 | 
				
			||||||
| 
						 | 
					@ -111,8 +109,6 @@
 | 
				
			||||||
		"got": "11.8.2",
 | 
							"got": "11.8.2",
 | 
				
			||||||
		"hpagent": "0.1.2",
 | 
							"hpagent": "0.1.2",
 | 
				
			||||||
		"http-signature": "1.3.5",
 | 
							"http-signature": "1.3.5",
 | 
				
			||||||
		"idb-keyval": "5.1.3",
 | 
					 | 
				
			||||||
		"insert-text-at-cursor": "0.3.0",
 | 
					 | 
				
			||||||
		"ip-cidr": "3.0.4",
 | 
							"ip-cidr": "3.0.4",
 | 
				
			||||||
		"is-svg": "4.3.1",
 | 
							"is-svg": "4.3.1",
 | 
				
			||||||
		"js-yaml": "4.1.0",
 | 
							"js-yaml": "4.1.0",
 | 
				
			||||||
| 
						 | 
					@ -133,7 +129,7 @@
 | 
				
			||||||
		"langmap": "0.0.16",
 | 
							"langmap": "0.0.16",
 | 
				
			||||||
		"mfm-js": "0.20.0",
 | 
							"mfm-js": "0.20.0",
 | 
				
			||||||
		"mime-types": "2.1.34",
 | 
							"mime-types": "2.1.34",
 | 
				
			||||||
		"misskey-js": "0.0.8",
 | 
							"misskey-js": "0.0.12",
 | 
				
			||||||
		"mocha": "8.4.0",
 | 
							"mocha": "8.4.0",
 | 
				
			||||||
		"ms": "3.0.0-canary.1",
 | 
							"ms": "3.0.0-canary.1",
 | 
				
			||||||
		"multer": "1.4.3",
 | 
							"multer": "1.4.3",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,2 +1,47 @@
 | 
				
			||||||
export const USER_ONLINE_THRESHOLD = 1000 * 60 * 10; // 10min
 | 
					export const USER_ONLINE_THRESHOLD = 1000 * 60 * 10; // 10min
 | 
				
			||||||
export const USER_ACTIVE_THRESHOLD = 1000 * 60 * 60 * 24 * 3; // 3days
 | 
					export const USER_ACTIVE_THRESHOLD = 1000 * 60 * 60 * 24 * 3; // 3days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ブラウザで直接表示することを許可するファイルの種類のリスト
 | 
				
			||||||
 | 
					// ここに含まれないものは application/octet-stream としてレスポンスされる
 | 
				
			||||||
 | 
					// SVGはXSSを生むので許可しない
 | 
				
			||||||
 | 
					export const FILE_TYPE_BROWSERSAFE = [
 | 
				
			||||||
 | 
						// Images
 | 
				
			||||||
 | 
						'image/png',
 | 
				
			||||||
 | 
						'image/gif',
 | 
				
			||||||
 | 
						'image/jpeg',
 | 
				
			||||||
 | 
						'image/webp',
 | 
				
			||||||
 | 
						'image/apng',
 | 
				
			||||||
 | 
						'image/bmp',
 | 
				
			||||||
 | 
						'image/tiff',
 | 
				
			||||||
 | 
						'image/x-icon',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// OggS
 | 
				
			||||||
 | 
						'audio/opus',
 | 
				
			||||||
 | 
						'video/ogg',
 | 
				
			||||||
 | 
						'audio/ogg',
 | 
				
			||||||
 | 
						'application/ogg',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ISO/IEC base media file format
 | 
				
			||||||
 | 
						'video/quicktime',
 | 
				
			||||||
 | 
						'video/mp4',
 | 
				
			||||||
 | 
						'audio/mp4',
 | 
				
			||||||
 | 
						'video/x-m4v',
 | 
				
			||||||
 | 
						'audio/x-m4a',
 | 
				
			||||||
 | 
						'video/3gpp',
 | 
				
			||||||
 | 
						'video/3gpp2',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						'video/mpeg',
 | 
				
			||||||
 | 
						'audio/mpeg',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						'video/webm',
 | 
				
			||||||
 | 
						'audio/webm',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						'audio/aac',
 | 
				
			||||||
 | 
						'audio/x-flac',
 | 
				
			||||||
 | 
						'audio/vnd.wave',
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,7 @@ import { detectType } from '@/misc/get-file-info';
 | 
				
			||||||
import { convertToJpeg, convertToPngOrJpeg } from '@/services/drive/image-processor';
 | 
					import { convertToJpeg, convertToPngOrJpeg } from '@/services/drive/image-processor';
 | 
				
			||||||
import { GenerateVideoThumbnail } from '@/services/drive/generate-video-thumbnail';
 | 
					import { GenerateVideoThumbnail } from '@/services/drive/generate-video-thumbnail';
 | 
				
			||||||
import { StatusError } from '@/misc/fetch';
 | 
					import { StatusError } from '@/misc/fetch';
 | 
				
			||||||
 | 
					import { FILE_TYPE_BROWSERSAFE } from '@/const';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//const _filename = fileURLToPath(import.meta.url);
 | 
					//const _filename = fileURLToPath(import.meta.url);
 | 
				
			||||||
const _filename = __filename;
 | 
					const _filename = __filename;
 | 
				
			||||||
| 
						 | 
					@ -27,6 +28,7 @@ const commonReadableHandlerGenerator = (ctx: Koa.Context) => (e: Error): void =>
 | 
				
			||||||
	ctx.set('Cache-Control', 'max-age=300');
 | 
						ctx.set('Cache-Control', 'max-age=300');
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// eslint-disable-next-line import/no-default-export
 | 
				
			||||||
export default async function(ctx: Koa.Context) {
 | 
					export default async function(ctx: Koa.Context) {
 | 
				
			||||||
	const key = ctx.params.key;
 | 
						const key = ctx.params.key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,7 +83,7 @@ export default async function(ctx: Koa.Context) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				const image = await convertFile();
 | 
									const image = await convertFile();
 | 
				
			||||||
				ctx.body = image.data;
 | 
									ctx.body = image.data;
 | 
				
			||||||
				ctx.set('Content-Type', image.type);
 | 
									ctx.set('Content-Type', FILE_TYPE_BROWSERSAFE.includes(image.type) ? image.type : 'application/octet-stream');
 | 
				
			||||||
				ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
									ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
				
			||||||
			} catch (e) {
 | 
								} catch (e) {
 | 
				
			||||||
				serverLogger.error(`${e}`);
 | 
									serverLogger.error(`${e}`);
 | 
				
			||||||
| 
						 | 
					@ -112,14 +114,14 @@ export default async function(ctx: Koa.Context) {
 | 
				
			||||||
		}).toString();
 | 
							}).toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.body = InternalStorage.read(key);
 | 
							ctx.body = InternalStorage.read(key);
 | 
				
			||||||
		ctx.set('Content-Type', mime);
 | 
							ctx.set('Content-Type', FILE_TYPE_BROWSERSAFE.includes(mime) ? mime : 'application/octet-stream');
 | 
				
			||||||
		ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
							ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
				
			||||||
		ctx.set('Content-Disposition', contentDisposition('inline', filename));
 | 
							ctx.set('Content-Disposition', contentDisposition('inline', filename));
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		const readable = InternalStorage.read(file.accessKey!);
 | 
							const readable = InternalStorage.read(file.accessKey!);
 | 
				
			||||||
		readable.on('error', commonReadableHandlerGenerator(ctx));
 | 
							readable.on('error', commonReadableHandlerGenerator(ctx));
 | 
				
			||||||
		ctx.body = readable;
 | 
							ctx.body = readable;
 | 
				
			||||||
		ctx.set('Content-Type', file.type);
 | 
							ctx.set('Content-Type', FILE_TYPE_BROWSERSAFE.includes(file.type) ? file.type : 'application/octet-stream');
 | 
				
			||||||
		ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
							ctx.set('Cache-Control', 'max-age=31536000, immutable');
 | 
				
			||||||
		ctx.set('Content-Disposition', contentDisposition('inline', file.name));
 | 
							ctx.set('Content-Disposition', contentDisposition('inline', file.name));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import { createTemp } from '@/misc/create-temp';
 | 
				
			||||||
import { downloadUrl } from '@/misc/download-url';
 | 
					import { downloadUrl } from '@/misc/download-url';
 | 
				
			||||||
import { detectType } from '@/misc/get-file-info';
 | 
					import { detectType } from '@/misc/get-file-info';
 | 
				
			||||||
import { StatusError } from '@/misc/fetch';
 | 
					import { StatusError } from '@/misc/fetch';
 | 
				
			||||||
 | 
					import { FILE_TYPE_BROWSERSAFE } from '@/const';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function proxyMedia(ctx: Koa.Context) {
 | 
					export async function proxyMedia(ctx: Koa.Context) {
 | 
				
			||||||
	const url = 'url' in ctx.query ? ctx.query.url : 'https://' + ctx.params.url;
 | 
						const url = 'url' in ctx.query ? ctx.query.url : 'https://' + ctx.params.url;
 | 
				
			||||||
| 
						 | 
					@ -19,6 +20,7 @@ export async function proxyMedia(ctx: Koa.Context) {
 | 
				
			||||||
		const { mime, ext } = await detectType(path);
 | 
							const { mime, ext } = await detectType(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!mime.startsWith('image/')) throw 403;
 | 
							if (!mime.startsWith('image/')) throw 403;
 | 
				
			||||||
 | 
							if (!FILE_TYPE_BROWSERSAFE.includes(mime)) throw 403;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let image: IImage;
 | 
							let image: IImage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@ import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
 | 
				
			||||||
import * as S3 from 'aws-sdk/clients/s3';
 | 
					import * as S3 from 'aws-sdk/clients/s3';
 | 
				
			||||||
import { getS3 } from './s3';
 | 
					import { getS3 } from './s3';
 | 
				
			||||||
import * as sharp from 'sharp';
 | 
					import * as sharp from 'sharp';
 | 
				
			||||||
 | 
					import { FILE_TYPE_BROWSERSAFE } from '@/const';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = driveLogger.createSubLogger('register', 'yellow');
 | 
					const logger = driveLogger.createSubLogger('register', 'yellow');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +161,7 @@ export async function generateAlts(path: string, type: string, generateWeb: bool
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
 | 
						if (!['image/jpeg', 'image/png', 'image/webp', 'image/svg+xml'].includes(type)) {
 | 
				
			||||||
		logger.debug(`web image and thumbnail not created (not an required file)`);
 | 
							logger.debug(`web image and thumbnail not created (not an required file)`);
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			webpublic: null,
 | 
								webpublic: null,
 | 
				
			||||||
| 
						 | 
					@ -201,7 +202,7 @@ export async function generateAlts(path: string, type: string, generateWeb: bool
 | 
				
			||||||
				webpublic = await convertSharpToJpeg(img, 2048, 2048);
 | 
									webpublic = await convertSharpToJpeg(img, 2048, 2048);
 | 
				
			||||||
			} else if (['image/webp'].includes(type)) {
 | 
								} else if (['image/webp'].includes(type)) {
 | 
				
			||||||
				webpublic = await convertSharpToWebp(img, 2048, 2048);
 | 
									webpublic = await convertSharpToWebp(img, 2048, 2048);
 | 
				
			||||||
			} else if (['image/png'].includes(type)) {
 | 
								} else if (['image/png', 'image/svg+xml'].includes(type)) {
 | 
				
			||||||
				webpublic = await convertSharpToPng(img, 2048, 2048);
 | 
									webpublic = await convertSharpToPng(img, 2048, 2048);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				logger.debug(`web image not created (not an required image)`);
 | 
									logger.debug(`web image not created (not an required image)`);
 | 
				
			||||||
| 
						 | 
					@ -220,7 +221,7 @@ export async function generateAlts(path: string, type: string, generateWeb: bool
 | 
				
			||||||
	try {
 | 
						try {
 | 
				
			||||||
		if (['image/jpeg', 'image/webp'].includes(type)) {
 | 
							if (['image/jpeg', 'image/webp'].includes(type)) {
 | 
				
			||||||
			thumbnail = await convertSharpToJpeg(img, 498, 280);
 | 
								thumbnail = await convertSharpToJpeg(img, 498, 280);
 | 
				
			||||||
		} else if (['image/png'].includes(type)) {
 | 
							} else if (['image/png', 'image/svg+xml'].includes(type)) {
 | 
				
			||||||
			thumbnail = await convertSharpToPngOrJpeg(img, 498, 280);
 | 
								thumbnail = await convertSharpToPngOrJpeg(img, 498, 280);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			logger.debug(`thumbnail not created (not an required file)`);
 | 
								logger.debug(`thumbnail not created (not an required file)`);
 | 
				
			||||||
| 
						 | 
					@ -241,6 +242,7 @@ export async function generateAlts(path: string, type: string, generateWeb: bool
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
async function upload(key: string, stream: fs.ReadStream | Buffer, type: string, filename?: string) {
 | 
					async function upload(key: string, stream: fs.ReadStream | Buffer, type: string, filename?: string) {
 | 
				
			||||||
	if (type === 'image/apng') type = 'image/png';
 | 
						if (type === 'image/apng') type = 'image/png';
 | 
				
			||||||
 | 
						if (!FILE_TYPE_BROWSERSAFE.includes(type)) type = 'application/octet-stream';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const meta = await fetchMeta();
 | 
						const meta = await fetchMeta();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1449,11 +1449,6 @@ autobind-decorator@2.4.0, autobind-decorator@^2.4.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c"
 | 
					  resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c"
 | 
				
			||||||
  integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw==
 | 
					  integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
autosize@4.0.4:
 | 
					 | 
				
			||||||
  version "4.0.4"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.4.tgz#924f13853a466b633b9309330833936d8bccce03"
 | 
					 | 
				
			||||||
  integrity sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
autwh@0.1.0:
 | 
					autwh@0.1.0:
 | 
				
			||||||
  version "0.1.0"
 | 
					  version "0.1.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/autwh/-/autwh-0.1.0.tgz#24a5300923309d105133401a2568f9c8ab7d7e03"
 | 
					  resolved "https://registry.yarnpkg.com/autwh/-/autwh-0.1.0.tgz#24a5300923309d105133401a2568f9c8ab7d7e03"
 | 
				
			||||||
| 
						 | 
					@ -2145,11 +2140,6 @@ commander@^8.2.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
 | 
				
			||||||
  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 | 
					  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
compare-versions@3.6.0:
 | 
					 | 
				
			||||||
  version "3.6.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
 | 
					 | 
				
			||||||
  integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
compress-commons@^4.1.0:
 | 
					compress-commons@^4.1.0:
 | 
				
			||||||
  version "4.1.1"
 | 
					  version "4.1.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d"
 | 
					  resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d"
 | 
				
			||||||
| 
						 | 
					@ -3951,13 +3941,6 @@ icss-utils@^5.0.0, icss-utils@^5.1.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
 | 
					  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
 | 
				
			||||||
  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
 | 
					  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
idb-keyval@5.1.3:
 | 
					 | 
				
			||||||
  version "5.1.3"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.1.3.tgz#6ef5dff371897c23f144322dc6374eadd6a345d9"
 | 
					 | 
				
			||||||
  integrity sha512-N9HbCK/FaXSRVI+k6Xq4QgWxbcZRUv+SfG1y7HJ28JdV8yEJu6k+C/YLea7npGckX2DQJeEVuMc4bKOBeU/2LQ==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    safari-14-idb-fix "^1.0.4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ieee754@1.1.13, ieee754@^1.1.4:
 | 
					ieee754@1.1.13, ieee754@^1.1.4:
 | 
				
			||||||
  version "1.1.13"
 | 
					  version "1.1.13"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
 | 
					  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
 | 
				
			||||||
| 
						 | 
					@ -4039,11 +4022,6 @@ ini@^1.3.4, ini@~1.3.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
 | 
					  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
 | 
				
			||||||
  integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
 | 
					  integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
insert-text-at-cursor@0.3.0:
 | 
					 | 
				
			||||||
  version "0.3.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/insert-text-at-cursor/-/insert-text-at-cursor-0.3.0.tgz#1819607680ec1570618347c4cd475e791faa25da"
 | 
					 | 
				
			||||||
  integrity sha512-/nPtyeX9xPUvxZf+r0518B7uqNKlP+LqNJqSiXFEaa2T71rWIwTVXGH7hB9xO/EVdwa5/pWlFCPwShOW81XIxQ==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
install-artifact-from-github@^1.2.0:
 | 
					install-artifact-from-github@^1.2.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz#adcbd123c16a4337ec44ea76d0ebf253cc16b074"
 | 
					  resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz#adcbd123c16a4337ec44ea76d0ebf253cc16b074"
 | 
				
			||||||
| 
						 | 
					@ -5207,10 +5185,10 @@ minizlib@^2.0.0, minizlib@^2.1.1:
 | 
				
			||||||
    minipass "^3.0.0"
 | 
					    minipass "^3.0.0"
 | 
				
			||||||
    yallist "^4.0.0"
 | 
					    yallist "^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
misskey-js@0.0.8:
 | 
					misskey-js@0.0.12:
 | 
				
			||||||
  version "0.0.8"
 | 
					  version "0.0.12"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/misskey-js/-/misskey-js-0.0.8.tgz#b47a1ec54bff96b23cc2a6b307a3895f99a94424"
 | 
					  resolved "https://registry.yarnpkg.com/misskey-js/-/misskey-js-0.0.12.tgz#c8fc2fc823c69b0b7d1cb153a5a29afc33f0ff4d"
 | 
				
			||||||
  integrity sha512-Q1L6FaroVz8kpW7T4xQyJmJKSwjOYPbNY3TspOUWmbIBDf2JP0HVeKEFLI9dvdSL0kSkdQNz3MSVLjlHiyPqLQ==
 | 
					  integrity sha512-Aq74/XskxaFN5CeCLeKPp5UP/xTFHvVnOV677G/zoSIShJRTeLsN5YnzwFpOVI2KN21JQ/ExesKDLoWlvQHtNA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    autobind-decorator "^2.4.0"
 | 
					    autobind-decorator "^2.4.0"
 | 
				
			||||||
    eventemitter3 "^4.0.7"
 | 
					    eventemitter3 "^4.0.7"
 | 
				
			||||||
| 
						 | 
					@ -6827,11 +6805,6 @@ s-age@1.1.2:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/s-age/-/s-age-1.1.2.tgz#c0cf15233ccc93f41de92ea42c36d957977d1ea2"
 | 
					  resolved "https://registry.yarnpkg.com/s-age/-/s-age-1.1.2.tgz#c0cf15233ccc93f41de92ea42c36d957977d1ea2"
 | 
				
			||||||
  integrity sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==
 | 
					  integrity sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
safari-14-idb-fix@^1.0.4:
 | 
					 | 
				
			||||||
  version "1.0.4"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-1.0.4.tgz#5c68ba63e2a8ae0d89a0aa1e13fe89e3aef7da19"
 | 
					 | 
				
			||||||
  integrity sha512-4+Y2baQdgJpzu84d0QjySl70Kyygzf0pepVg8NVg4NnQEPpfC91fAn0baNvtStlCjUUxxiu0BOMiafa98fRRuA==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
safe-buffer@*:
 | 
					safe-buffer@*:
 | 
				
			||||||
  version "5.2.1"
 | 
					  version "5.2.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
 | 
					  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,36 +44,35 @@
 | 
				
			||||||
		"@vue/compiler-sfc": "3.2.26",
 | 
							"@vue/compiler-sfc": "3.2.26",
 | 
				
			||||||
		"abort-controller": "3.0.0",
 | 
							"abort-controller": "3.0.0",
 | 
				
			||||||
		"autobind-decorator": "2.4.0",
 | 
							"autobind-decorator": "2.4.0",
 | 
				
			||||||
		"autosize": "4.0.4",
 | 
							"autosize": "5.0.1",
 | 
				
			||||||
		"autwh": "0.1.0",
 | 
							"autwh": "0.1.0",
 | 
				
			||||||
		"blurhash": "1.1.4",
 | 
							"blurhash": "1.1.4",
 | 
				
			||||||
		"broadcast-channel": "4.9.0",
 | 
							"broadcast-channel": "4.9.0",
 | 
				
			||||||
		"chart.js": "3.7.0",
 | 
							"chart.js": "3.7.0",
 | 
				
			||||||
		"chartjs-adapter-date-fns": "2.0.0",
 | 
							"chartjs-adapter-date-fns": "2.0.0",
 | 
				
			||||||
		"chartjs-plugin-zoom": "1.2.0",
 | 
							"chartjs-plugin-zoom": "1.2.0",
 | 
				
			||||||
		"compare-versions": "3.6.0",
 | 
							"compare-versions": "4.1.2",
 | 
				
			||||||
		"content-disposition": "0.5.4",
 | 
							"content-disposition": "0.5.4",
 | 
				
			||||||
		"crc-32": "1.2.0",
 | 
							"crc-32": "1.2.0",
 | 
				
			||||||
		"css-loader": "6.5.1",
 | 
							"css-loader": "6.5.1",
 | 
				
			||||||
		"cssnano": "5.0.14",
 | 
							"cssnano": "5.0.14",
 | 
				
			||||||
		"date-fns": "2.28.0",
 | 
							"date-fns": "2.28.0",
 | 
				
			||||||
		"dateformat": "4.5.1",
 | 
					 | 
				
			||||||
		"escape-regexp": "0.0.1",
 | 
							"escape-regexp": "0.0.1",
 | 
				
			||||||
		"eslint": "8.5.0",
 | 
							"eslint": "8.6.0",
 | 
				
			||||||
		"eslint-plugin-vue": "8.2.0",
 | 
							"eslint-plugin-vue": "8.2.0",
 | 
				
			||||||
		"eventemitter3": "4.0.7",
 | 
							"eventemitter3": "4.0.7",
 | 
				
			||||||
		"feed": "4.2.2",
 | 
							"feed": "4.2.2",
 | 
				
			||||||
		"glob": "7.2.0",
 | 
							"glob": "7.2.0",
 | 
				
			||||||
		"idb-keyval": "5.1.3",
 | 
							"idb-keyval": "6.0.3",
 | 
				
			||||||
		"insert-text-at-cursor": "0.3.0",
 | 
							"insert-text-at-cursor": "0.3.0",
 | 
				
			||||||
		"ip-cidr": "3.0.4",
 | 
							"ip-cidr": "3.0.4",
 | 
				
			||||||
		"json5": "2.2.0",
 | 
							"json5": "2.2.0",
 | 
				
			||||||
		"json5-loader": "4.0.1",
 | 
							"json5-loader": "4.0.1",
 | 
				
			||||||
		"katex": "0.15.1",
 | 
							"katex": "0.15.1",
 | 
				
			||||||
		"langmap": "0.0.16",
 | 
							"langmap": "0.0.16",
 | 
				
			||||||
		"matter-js": "0.17.1",
 | 
							"matter-js": "0.18.0",
 | 
				
			||||||
		"mfm-js": "0.20.0",
 | 
							"mfm-js": "0.20.0",
 | 
				
			||||||
		"misskey-js": "0.0.10",
 | 
							"misskey-js": "0.0.12",
 | 
				
			||||||
		"mocha": "8.4.0",
 | 
							"mocha": "8.4.0",
 | 
				
			||||||
		"ms": "2.1.3",
 | 
							"ms": "2.1.3",
 | 
				
			||||||
		"nested-property": "4.0.0",
 | 
							"nested-property": "4.0.0",
 | 
				
			||||||
| 
						 | 
					@ -94,7 +93,7 @@
 | 
				
			||||||
		"request-stats": "3.0.0",
 | 
							"request-stats": "3.0.0",
 | 
				
			||||||
		"rndstr": "1.0.0",
 | 
							"rndstr": "1.0.0",
 | 
				
			||||||
		"s-age": "1.1.2",
 | 
							"s-age": "1.1.2",
 | 
				
			||||||
		"sass": "1.45.1",
 | 
							"sass": "1.45.2",
 | 
				
			||||||
		"sass-loader": "12.4.0",
 | 
							"sass-loader": "12.4.0",
 | 
				
			||||||
		"seedrandom": "3.0.5",
 | 
							"seedrandom": "3.0.5",
 | 
				
			||||||
		"strict-event-emitter-types": "2.0.0",
 | 
							"strict-event-emitter-types": "2.0.0",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +107,7 @@
 | 
				
			||||||
		"tmp": "0.2.1",
 | 
							"tmp": "0.2.1",
 | 
				
			||||||
		"ts-loader": "9.2.6",
 | 
							"ts-loader": "9.2.6",
 | 
				
			||||||
		"ts-node": "10.4.0",
 | 
							"ts-node": "10.4.0",
 | 
				
			||||||
		"tsc-alias": "1.4.2",
 | 
							"tsc-alias": "1.5.0",
 | 
				
			||||||
		"tsconfig-paths": "3.12.0",
 | 
							"tsconfig-paths": "3.12.0",
 | 
				
			||||||
		"twemoji-parser": "13.1.0",
 | 
							"twemoji-parser": "13.1.0",
 | 
				
			||||||
		"typescript": "4.5.4",
 | 
							"typescript": "4.5.4",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ if (localStorage.getItem('accounts') != null) {
 | 
				
			||||||
import * as Sentry from '@sentry/browser';
 | 
					import * as Sentry from '@sentry/browser';
 | 
				
			||||||
import { Integrations } from '@sentry/tracing';
 | 
					import { Integrations } from '@sentry/tracing';
 | 
				
			||||||
import { computed, createApp, watch, markRaw, version as vueVersion } from 'vue';
 | 
					import { computed, createApp, watch, markRaw, version as vueVersion } from 'vue';
 | 
				
			||||||
import compareVersions from 'compare-versions';
 | 
					import * as compareVersions from 'compare-versions';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import widgets from '@/widgets';
 | 
					import widgets from '@/widgets';
 | 
				
			||||||
import directives from '@/directives';
 | 
					import directives from '@/directives';
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,97 +0,0 @@
 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
<MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
 | 
					 | 
				
			||||||
	<FormSuspense :p="init">
 | 
					 | 
				
			||||||
		<div class="_formRoot">
 | 
					 | 
				
			||||||
			<FormSwitch v-model="cacheRemoteFiles" class="_formBlock">
 | 
					 | 
				
			||||||
				<template #label>{{ $ts.cacheRemoteFiles }}</template>
 | 
					 | 
				
			||||||
				<template #caption>{{ $ts.cacheRemoteFilesDescription }}</template>
 | 
					 | 
				
			||||||
			</FormSwitch>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			<FormSwitch v-model="proxyRemoteFiles" class="_formBlock">
 | 
					 | 
				
			||||||
				<template #label>{{ $ts.proxyRemoteFiles }}</template>
 | 
					 | 
				
			||||||
				<template #caption>{{ $ts.proxyRemoteFilesDescription }}</template>
 | 
					 | 
				
			||||||
			</FormSwitch>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			<FormSplit :min-width="280">
 | 
					 | 
				
			||||||
				<FormInput v-model="localDriveCapacityMb" type="number" class="_formBlock">
 | 
					 | 
				
			||||||
					<template #label>{{ $ts.driveCapacityPerLocalAccount }}</template>
 | 
					 | 
				
			||||||
					<template #suffix>MB</template>
 | 
					 | 
				
			||||||
					<template #caption>{{ $ts.inMb }}</template>
 | 
					 | 
				
			||||||
				</FormInput>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				<FormInput v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles" class="_formBlock">
 | 
					 | 
				
			||||||
					<template #label>{{ $ts.driveCapacityPerRemoteAccount }}</template>
 | 
					 | 
				
			||||||
					<template #suffix>MB</template>
 | 
					 | 
				
			||||||
					<template #caption>{{ $ts.inMb }}</template>
 | 
					 | 
				
			||||||
				</FormInput>
 | 
					 | 
				
			||||||
			</FormSplit>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</FormSuspense>
 | 
					 | 
				
			||||||
</MkSpacer>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script lang="ts">
 | 
					 | 
				
			||||||
import { defineComponent } from 'vue';
 | 
					 | 
				
			||||||
import FormSwitch from '@/components/form/switch.vue';
 | 
					 | 
				
			||||||
import FormInput from '@/components/form/input.vue';
 | 
					 | 
				
			||||||
import FormSuspense from '@/components/form/suspense.vue';
 | 
					 | 
				
			||||||
import FormSplit from '@/components/form/split.vue';
 | 
					 | 
				
			||||||
import * as os from '@/os';
 | 
					 | 
				
			||||||
import * as symbols from '@/symbols';
 | 
					 | 
				
			||||||
import { fetchInstance } from '@/instance';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default defineComponent({
 | 
					 | 
				
			||||||
	components: {
 | 
					 | 
				
			||||||
		FormSwitch,
 | 
					 | 
				
			||||||
		FormInput,
 | 
					 | 
				
			||||||
		FormSplit,
 | 
					 | 
				
			||||||
		FormSuspense,
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	emits: ['info'],
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			[symbols.PAGE_INFO]: {
 | 
					 | 
				
			||||||
				title: this.$ts.files,
 | 
					 | 
				
			||||||
				icon: 'fas fa-cloud',
 | 
					 | 
				
			||||||
				bg: 'var(--bg)',
 | 
					 | 
				
			||||||
				actions: [{
 | 
					 | 
				
			||||||
					asFullButton: true,
 | 
					 | 
				
			||||||
					icon: 'fas fa-check',
 | 
					 | 
				
			||||||
					text: this.$ts.save,
 | 
					 | 
				
			||||||
					handler: this.save,
 | 
					 | 
				
			||||||
				}],
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			cacheRemoteFiles: false,
 | 
					 | 
				
			||||||
			proxyRemoteFiles: false,
 | 
					 | 
				
			||||||
			localDriveCapacityMb: 0,
 | 
					 | 
				
			||||||
			remoteDriveCapacityMb: 0,
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	async mounted() {
 | 
					 | 
				
			||||||
		this.$emit('info', this[symbols.PAGE_INFO]);
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	methods: {
 | 
					 | 
				
			||||||
		async init() {
 | 
					 | 
				
			||||||
			const meta = await os.api('meta', { detail: true });
 | 
					 | 
				
			||||||
			this.cacheRemoteFiles = meta.cacheRemoteFiles;
 | 
					 | 
				
			||||||
			this.proxyRemoteFiles = meta.proxyRemoteFiles;
 | 
					 | 
				
			||||||
			this.localDriveCapacityMb = meta.driveCapacityPerLocalUserMb;
 | 
					 | 
				
			||||||
			this.remoteDriveCapacityMb = meta.driveCapacityPerRemoteUserMb;
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		save() {
 | 
					 | 
				
			||||||
			os.apiWithDialog('admin/update-meta', {
 | 
					 | 
				
			||||||
				cacheRemoteFiles: this.cacheRemoteFiles,
 | 
					 | 
				
			||||||
				proxyRemoteFiles: this.proxyRemoteFiles,
 | 
					 | 
				
			||||||
				localDriveCapacityMb: parseInt(this.localDriveCapacityMb, 10),
 | 
					 | 
				
			||||||
				remoteDriveCapacityMb: parseInt(this.remoteDriveCapacityMb, 10),
 | 
					 | 
				
			||||||
			}).then(() => {
 | 
					 | 
				
			||||||
				fetchInstance();
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -162,11 +162,6 @@ export default defineComponent({
 | 
				
			||||||
				text: i18n.locale.general,
 | 
									text: i18n.locale.general,
 | 
				
			||||||
				to: '/admin/settings',
 | 
									to: '/admin/settings',
 | 
				
			||||||
				active: page.value === 'settings',
 | 
									active: page.value === 'settings',
 | 
				
			||||||
			}, {
 | 
					 | 
				
			||||||
				icon: 'fas fa-cloud',
 | 
					 | 
				
			||||||
				text: i18n.locale.files,
 | 
					 | 
				
			||||||
				to: '/admin/files-settings',
 | 
					 | 
				
			||||||
				active: page.value === 'files-settings',
 | 
					 | 
				
			||||||
			}, {
 | 
								}, {
 | 
				
			||||||
				icon: 'fas fa-envelope',
 | 
									icon: 'fas fa-envelope',
 | 
				
			||||||
				text: i18n.locale.emailServer,
 | 
									text: i18n.locale.emailServer,
 | 
				
			||||||
| 
						 | 
					@ -236,7 +231,6 @@ export default defineComponent({
 | 
				
			||||||
				case 'database': return defineAsyncComponent(() => import('./database.vue'));
 | 
									case 'database': return defineAsyncComponent(() => import('./database.vue'));
 | 
				
			||||||
				case 'abuses': return defineAsyncComponent(() => import('./abuses.vue'));
 | 
									case 'abuses': return defineAsyncComponent(() => import('./abuses.vue'));
 | 
				
			||||||
				case 'settings': return defineAsyncComponent(() => import('./settings.vue'));
 | 
									case 'settings': return defineAsyncComponent(() => import('./settings.vue'));
 | 
				
			||||||
				case 'files-settings': return defineAsyncComponent(() => import('./files-settings.vue'));
 | 
					 | 
				
			||||||
				case 'email-settings': return defineAsyncComponent(() => import('./email-settings.vue'));
 | 
									case 'email-settings': return defineAsyncComponent(() => import('./email-settings.vue'));
 | 
				
			||||||
				case 'object-storage': return defineAsyncComponent(() => import('./object-storage.vue'));
 | 
									case 'object-storage': return defineAsyncComponent(() => import('./object-storage.vue'));
 | 
				
			||||||
				case 'security': return defineAsyncComponent(() => import('./security.vue'));
 | 
									case 'security': return defineAsyncComponent(() => import('./security.vue'));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,16 +2,6 @@
 | 
				
			||||||
<MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
 | 
					<MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
 | 
				
			||||||
	<FormSuspense :p="init">
 | 
						<FormSuspense :p="init">
 | 
				
			||||||
		<div class="_formRoot">
 | 
							<div class="_formRoot">
 | 
				
			||||||
			<FormSection>
 | 
					 | 
				
			||||||
				<FormSwitch v-model="enableRegistration" class="_formBlock">
 | 
					 | 
				
			||||||
					<template #label>{{ $ts.enableRegistration }}</template>
 | 
					 | 
				
			||||||
				</FormSwitch>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				<FormSwitch v-model="emailRequiredForSignup" class="_formBlock">
 | 
					 | 
				
			||||||
					<template #label>{{ $ts.emailRequiredForSignup }}</template>
 | 
					 | 
				
			||||||
				</FormSwitch>
 | 
					 | 
				
			||||||
			</FormSection>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			<FormLink to="/admin/bot-protection" class="_formBlock">
 | 
								<FormLink to="/admin/bot-protection" class="_formBlock">
 | 
				
			||||||
				<i class="fas fa-shield-alt"></i> {{ $ts.botProtection }}
 | 
									<i class="fas fa-shield-alt"></i> {{ $ts.botProtection }}
 | 
				
			||||||
				<template v-if="enableHcaptcha" #suffix>hCaptcha</template>
 | 
									<template v-if="enableHcaptcha" #suffix>hCaptcha</template>
 | 
				
			||||||
| 
						 | 
					@ -51,17 +41,9 @@ export default defineComponent({
 | 
				
			||||||
				title: this.$ts.security,
 | 
									title: this.$ts.security,
 | 
				
			||||||
				icon: 'fas fa-lock',
 | 
									icon: 'fas fa-lock',
 | 
				
			||||||
				bg: 'var(--bg)',
 | 
									bg: 'var(--bg)',
 | 
				
			||||||
				actions: [{
 | 
					 | 
				
			||||||
					asFullButton: true,
 | 
					 | 
				
			||||||
					icon: 'fas fa-check',
 | 
					 | 
				
			||||||
					text: this.$ts.save,
 | 
					 | 
				
			||||||
					handler: this.save,
 | 
					 | 
				
			||||||
				}],
 | 
					 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			enableHcaptcha: false,
 | 
								enableHcaptcha: false,
 | 
				
			||||||
			enableRecaptcha: false,
 | 
								enableRecaptcha: false,
 | 
				
			||||||
			enableRegistration: false,
 | 
					 | 
				
			||||||
			emailRequiredForSignup: false,
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,18 +56,7 @@ export default defineComponent({
 | 
				
			||||||
			const meta = await os.api('meta', { detail: true });
 | 
								const meta = await os.api('meta', { detail: true });
 | 
				
			||||||
			this.enableHcaptcha = meta.enableHcaptcha;
 | 
								this.enableHcaptcha = meta.enableHcaptcha;
 | 
				
			||||||
			this.enableRecaptcha = meta.enableRecaptcha;
 | 
								this.enableRecaptcha = meta.enableRecaptcha;
 | 
				
			||||||
			this.enableRegistration = !meta.disableRegistration;
 | 
					 | 
				
			||||||
			this.emailRequiredForSignup = meta.emailRequiredForSignup;
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		save() {
 | 
					 | 
				
			||||||
			os.apiWithDialog('admin/update-meta', {
 | 
					 | 
				
			||||||
				disableRegistration: !this.enableRegistration,
 | 
					 | 
				
			||||||
				emailRequiredForSignup: this.emailRequiredForSignup,
 | 
					 | 
				
			||||||
			}).then(() => {
 | 
					 | 
				
			||||||
				fetchInstance();
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,11 +51,49 @@
 | 
				
			||||||
				<template #label>{{ $ts.maxNoteTextLength }}</template>
 | 
									<template #label>{{ $ts.maxNoteTextLength }}</template>
 | 
				
			||||||
			</FormInput>
 | 
								</FormInput>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<FormSection>
 | 
				
			||||||
 | 
									<FormSwitch v-model="enableRegistration" class="_formBlock">
 | 
				
			||||||
 | 
										<template #label>{{ $ts.enableRegistration }}</template>
 | 
				
			||||||
 | 
									</FormSwitch>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<FormSwitch v-model="emailRequiredForSignup" class="_formBlock">
 | 
				
			||||||
 | 
										<template #label>{{ $ts.emailRequiredForSignup }}</template>
 | 
				
			||||||
 | 
									</FormSwitch>
 | 
				
			||||||
 | 
								</FormSection>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<FormSection>
 | 
								<FormSection>
 | 
				
			||||||
				<FormSwitch v-model="enableLocalTimeline" class="_formBlock">{{ $ts.enableLocalTimeline }}</FormSwitch>
 | 
									<FormSwitch v-model="enableLocalTimeline" class="_formBlock">{{ $ts.enableLocalTimeline }}</FormSwitch>
 | 
				
			||||||
				<FormSwitch v-model="enableGlobalTimeline" class="_formBlock">{{ $ts.enableGlobalTimeline }}</FormSwitch>
 | 
									<FormSwitch v-model="enableGlobalTimeline" class="_formBlock">{{ $ts.enableGlobalTimeline }}</FormSwitch>
 | 
				
			||||||
				<FormInfo class="_formBlock">{{ $ts.disablingTimelinesInfo }}</FormInfo>
 | 
									<FormInfo class="_formBlock">{{ $ts.disablingTimelinesInfo }}</FormInfo>
 | 
				
			||||||
			</FormSection>
 | 
								</FormSection>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<FormSection>
 | 
				
			||||||
 | 
									<template #label>{{ $ts.files }}</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<FormSwitch v-model="cacheRemoteFiles" class="_formBlock">
 | 
				
			||||||
 | 
										<template #label>{{ $ts.cacheRemoteFiles }}</template>
 | 
				
			||||||
 | 
										<template #caption>{{ $ts.cacheRemoteFilesDescription }}</template>
 | 
				
			||||||
 | 
									</FormSwitch>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<FormSwitch v-model="proxyRemoteFiles" class="_formBlock">
 | 
				
			||||||
 | 
										<template #label>{{ $ts.proxyRemoteFiles }}</template>
 | 
				
			||||||
 | 
										<template #caption>{{ $ts.proxyRemoteFilesDescription }}</template>
 | 
				
			||||||
 | 
									</FormSwitch>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<FormSplit :min-width="280">
 | 
				
			||||||
 | 
										<FormInput v-model="localDriveCapacityMb" type="number" class="_formBlock">
 | 
				
			||||||
 | 
											<template #label>{{ $ts.driveCapacityPerLocalAccount }}</template>
 | 
				
			||||||
 | 
											<template #suffix>MB</template>
 | 
				
			||||||
 | 
											<template #caption>{{ $ts.inMb }}</template>
 | 
				
			||||||
 | 
										</FormInput>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<FormInput v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles" class="_formBlock">
 | 
				
			||||||
 | 
											<template #label>{{ $ts.driveCapacityPerRemoteAccount }}</template>
 | 
				
			||||||
 | 
											<template #suffix>MB</template>
 | 
				
			||||||
 | 
											<template #caption>{{ $ts.inMb }}</template>
 | 
				
			||||||
 | 
										</FormInput>
 | 
				
			||||||
 | 
									</FormSplit>
 | 
				
			||||||
 | 
								</FormSection>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</FormSuspense>
 | 
						</FormSuspense>
 | 
				
			||||||
</MkSpacer>
 | 
					</MkSpacer>
 | 
				
			||||||
| 
						 | 
					@ -112,6 +150,12 @@ export default defineComponent({
 | 
				
			||||||
			enableLocalTimeline: false,
 | 
								enableLocalTimeline: false,
 | 
				
			||||||
			enableGlobalTimeline: false,
 | 
								enableGlobalTimeline: false,
 | 
				
			||||||
			pinnedUsers: '',
 | 
								pinnedUsers: '',
 | 
				
			||||||
 | 
								cacheRemoteFiles: false,
 | 
				
			||||||
 | 
								proxyRemoteFiles: false,
 | 
				
			||||||
 | 
								localDriveCapacityMb: 0,
 | 
				
			||||||
 | 
								remoteDriveCapacityMb: 0,
 | 
				
			||||||
 | 
								enableRegistration: false,
 | 
				
			||||||
 | 
								emailRequiredForSignup: false,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,6 +178,12 @@ export default defineComponent({
 | 
				
			||||||
			this.enableLocalTimeline = !meta.disableLocalTimeline;
 | 
								this.enableLocalTimeline = !meta.disableLocalTimeline;
 | 
				
			||||||
			this.enableGlobalTimeline = !meta.disableGlobalTimeline;
 | 
								this.enableGlobalTimeline = !meta.disableGlobalTimeline;
 | 
				
			||||||
			this.pinnedUsers = meta.pinnedUsers.join('\n');
 | 
								this.pinnedUsers = meta.pinnedUsers.join('\n');
 | 
				
			||||||
 | 
								this.cacheRemoteFiles = meta.cacheRemoteFiles;
 | 
				
			||||||
 | 
								this.proxyRemoteFiles = meta.proxyRemoteFiles;
 | 
				
			||||||
 | 
								this.localDriveCapacityMb = meta.driveCapacityPerLocalUserMb;
 | 
				
			||||||
 | 
								this.remoteDriveCapacityMb = meta.driveCapacityPerRemoteUserMb;
 | 
				
			||||||
 | 
								this.enableRegistration = !meta.disableRegistration;
 | 
				
			||||||
 | 
								this.emailRequiredForSignup = meta.emailRequiredForSignup;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		save() {
 | 
							save() {
 | 
				
			||||||
| 
						 | 
					@ -150,6 +200,12 @@ export default defineComponent({
 | 
				
			||||||
				disableLocalTimeline: !this.enableLocalTimeline,
 | 
									disableLocalTimeline: !this.enableLocalTimeline,
 | 
				
			||||||
				disableGlobalTimeline: !this.enableGlobalTimeline,
 | 
									disableGlobalTimeline: !this.enableGlobalTimeline,
 | 
				
			||||||
				pinnedUsers: this.pinnedUsers.split('\n'),
 | 
									pinnedUsers: this.pinnedUsers.split('\n'),
 | 
				
			||||||
 | 
									cacheRemoteFiles: this.cacheRemoteFiles,
 | 
				
			||||||
 | 
									proxyRemoteFiles: this.proxyRemoteFiles,
 | 
				
			||||||
 | 
									localDriveCapacityMb: parseInt(this.localDriveCapacityMb, 10),
 | 
				
			||||||
 | 
									remoteDriveCapacityMb: parseInt(this.remoteDriveCapacityMb, 10),
 | 
				
			||||||
 | 
									disableRegistration: !this.enableRegistration,
 | 
				
			||||||
 | 
									emailRequiredForSignup: this.emailRequiredForSignup,
 | 
				
			||||||
			}).then(() => {
 | 
								}).then(() => {
 | 
				
			||||||
				fetchInstance();
 | 
									fetchInstance();
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,6 @@
 | 
				
			||||||
import { defineComponent } from 'vue';
 | 
					import { defineComponent } from 'vue';
 | 
				
			||||||
import FormTextarea from '@/components/form/textarea.vue';
 | 
					import FormTextarea from '@/components/form/textarea.vue';
 | 
				
			||||||
import FormRadios from '@/components/form/radios.vue';
 | 
					import FormRadios from '@/components/form/radios.vue';
 | 
				
			||||||
import FormBase from '@/components/debobigego/base.vue';
 | 
					 | 
				
			||||||
import FormButton from '@/components/ui/button.vue';
 | 
					import FormButton from '@/components/ui/button.vue';
 | 
				
			||||||
import * as os from '@/os';
 | 
					import * as os from '@/os';
 | 
				
			||||||
import { menuDef } from '@/menu';
 | 
					import { menuDef } from '@/menu';
 | 
				
			||||||
| 
						 | 
					@ -31,7 +30,6 @@ import { unisonReload } from '@/scripts/unison-reload';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		FormBase,
 | 
					 | 
				
			||||||
		FormButton,
 | 
							FormButton,
 | 
				
			||||||
		FormTextarea,
 | 
							FormTextarea,
 | 
				
			||||||
		FormRadios,
 | 
							FormRadios,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@
 | 
				
			||||||
import { defineComponent } from 'vue';
 | 
					import { defineComponent } from 'vue';
 | 
				
			||||||
import FormButton from '@/components/ui/button.vue';
 | 
					import FormButton from '@/components/ui/button.vue';
 | 
				
			||||||
import FormLink from '@/components/form/link.vue';
 | 
					import FormLink from '@/components/form/link.vue';
 | 
				
			||||||
import FormBase from '@/components/debobigego/base.vue';
 | 
					 | 
				
			||||||
import FormSection from '@/components/form/section.vue';
 | 
					import FormSection from '@/components/form/section.vue';
 | 
				
			||||||
import { notificationTypes } from 'misskey-js';
 | 
					import { notificationTypes } from 'misskey-js';
 | 
				
			||||||
import * as os from '@/os';
 | 
					import * as os from '@/os';
 | 
				
			||||||
| 
						 | 
					@ -21,7 +20,6 @@ import * as symbols from '@/symbols';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		FormBase,
 | 
					 | 
				
			||||||
		FormLink,
 | 
							FormLink,
 | 
				
			||||||
		FormButton,
 | 
							FormButton,
 | 
				
			||||||
		FormSection,
 | 
							FormSection,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,4 +3,8 @@ import { markRaw } from 'vue';
 | 
				
			||||||
import { $i } from '@/account';
 | 
					import { $i } from '@/account';
 | 
				
			||||||
import { url } from '@/config';
 | 
					import { url } from '@/config';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const stream = markRaw(new Misskey.Stream(url, $i));
 | 
					console.log($i.token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const stream = markRaw(new Misskey.Stream(url, $i ? {
 | 
				
			||||||
 | 
						token: $i.token,
 | 
				
			||||||
 | 
					} : null));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1162,6 +1162,11 @@ acorn@^8.6.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
 | 
					  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
 | 
				
			||||||
  integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
 | 
					  integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					acorn@^8.7.0:
 | 
				
			||||||
 | 
					  version "8.7.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
 | 
				
			||||||
 | 
					  integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
agent-base@6:
 | 
					agent-base@6:
 | 
				
			||||||
  version "6.0.2"
 | 
					  version "6.0.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
 | 
					  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
 | 
				
			||||||
| 
						 | 
					@ -1358,10 +1363,10 @@ autobind-decorator@2.4.0, autobind-decorator@^2.4.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c"
 | 
					  resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c"
 | 
				
			||||||
  integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw==
 | 
					  integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
autosize@4.0.4:
 | 
					autosize@5.0.1:
 | 
				
			||||||
  version "4.0.4"
 | 
					  version "5.0.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.4.tgz#924f13853a466b633b9309330833936d8bccce03"
 | 
					  resolved "https://registry.yarnpkg.com/autosize/-/autosize-5.0.1.tgz#ed269b0fa9b7eb47627048a1bb3299e99e003a0f"
 | 
				
			||||||
  integrity sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==
 | 
					  integrity sha512-UIWUlE4TOVPNNj2jjrU39wI4hEYbneUypEqcyRmRFIx5CC2gNdg3rQr+Zh7/3h6egbBvm33TDQjNQKtj9Tk1HA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
autwh@0.1.0:
 | 
					autwh@0.1.0:
 | 
				
			||||||
  version "0.1.0"
 | 
					  version "0.1.0"
 | 
				
			||||||
| 
						 | 
					@ -1806,7 +1811,7 @@ commander@^7.2.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
 | 
				
			||||||
  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
 | 
					  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
commander@^8.0.0, commander@^8.2.0:
 | 
					commander@^8.0.0, commander@^8.3.0:
 | 
				
			||||||
  version "8.3.0"
 | 
					  version "8.3.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
 | 
				
			||||||
  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 | 
					  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 | 
				
			||||||
| 
						 | 
					@ -1816,10 +1821,10 @@ common-tags@^1.8.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
 | 
					  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
 | 
				
			||||||
  integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
 | 
					  integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
compare-versions@3.6.0:
 | 
					compare-versions@4.1.2:
 | 
				
			||||||
  version "3.6.0"
 | 
					  version "4.1.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
 | 
					  resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.2.tgz#a7b1678c897000d03a70a0e01efee43e7b04dda7"
 | 
				
			||||||
  integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
 | 
					  integrity sha512-LAfbAbAgjnIwPsr2fvJLfrSyqAhK5nj/ffIg7a5aigry9RXJfNzVnOu0Egw8Z+G8LMDu1Qig2q48bpBzjyjZoQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concat-map@0.0.1:
 | 
					concat-map@0.0.1:
 | 
				
			||||||
  version "0.0.1"
 | 
					  version "0.0.1"
 | 
				
			||||||
| 
						 | 
					@ -2107,11 +2112,6 @@ date-fns@2.28.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
 | 
					  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
 | 
				
			||||||
  integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
 | 
					  integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dateformat@4.5.1:
 | 
					 | 
				
			||||||
  version "4.5.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.5.1.tgz#c20e7a9ca77d147906b6dc2261a8be0a5bd2173c"
 | 
					 | 
				
			||||||
  integrity sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dayjs@^1.10.4:
 | 
					dayjs@^1.10.4:
 | 
				
			||||||
  version "1.10.6"
 | 
					  version "1.10.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63"
 | 
					  resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63"
 | 
				
			||||||
| 
						 | 
					@ -2591,10 +2591,10 @@ eslint-visitor-keys@^3.1.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2"
 | 
				
			||||||
  integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==
 | 
					  integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint@8.5.0:
 | 
					eslint@8.6.0:
 | 
				
			||||||
  version "8.5.0"
 | 
					  version "8.6.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.5.0.tgz#ddd2c1afd8f412036f87ae2a063d2aa296d3175f"
 | 
					  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.6.0.tgz#4318c6a31c5584838c1a2e940c478190f58d558e"
 | 
				
			||||||
  integrity sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==
 | 
					  integrity sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@eslint/eslintrc" "^1.0.5"
 | 
					    "@eslint/eslintrc" "^1.0.5"
 | 
				
			||||||
    "@humanwhocodes/config-array" "^0.9.2"
 | 
					    "@humanwhocodes/config-array" "^0.9.2"
 | 
				
			||||||
| 
						 | 
					@ -2608,7 +2608,7 @@ eslint@8.5.0:
 | 
				
			||||||
    eslint-scope "^7.1.0"
 | 
					    eslint-scope "^7.1.0"
 | 
				
			||||||
    eslint-utils "^3.0.0"
 | 
					    eslint-utils "^3.0.0"
 | 
				
			||||||
    eslint-visitor-keys "^3.1.0"
 | 
					    eslint-visitor-keys "^3.1.0"
 | 
				
			||||||
    espree "^9.2.0"
 | 
					    espree "^9.3.0"
 | 
				
			||||||
    esquery "^1.4.0"
 | 
					    esquery "^1.4.0"
 | 
				
			||||||
    esutils "^2.0.2"
 | 
					    esutils "^2.0.2"
 | 
				
			||||||
    fast-deep-equal "^3.1.3"
 | 
					    fast-deep-equal "^3.1.3"
 | 
				
			||||||
| 
						 | 
					@ -2653,6 +2653,15 @@ espree@^9.2.0:
 | 
				
			||||||
    acorn-jsx "^5.3.1"
 | 
					    acorn-jsx "^5.3.1"
 | 
				
			||||||
    eslint-visitor-keys "^3.1.0"
 | 
					    eslint-visitor-keys "^3.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					espree@^9.3.0:
 | 
				
			||||||
 | 
					  version "9.3.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8"
 | 
				
			||||||
 | 
					  integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    acorn "^8.7.0"
 | 
				
			||||||
 | 
					    acorn-jsx "^5.3.1"
 | 
				
			||||||
 | 
					    eslint-visitor-keys "^3.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esprima@^4.0.0:
 | 
					esprima@^4.0.0:
 | 
				
			||||||
  version "4.0.1"
 | 
					  version "4.0.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
 | 
					  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
 | 
				
			||||||
| 
						 | 
					@ -3299,12 +3308,12 @@ icss-utils@^5.0.0, icss-utils@^5.1.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
 | 
					  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
 | 
				
			||||||
  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
 | 
					  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
idb-keyval@5.1.3:
 | 
					idb-keyval@6.0.3:
 | 
				
			||||||
  version "5.1.3"
 | 
					  version "6.0.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.1.3.tgz#6ef5dff371897c23f144322dc6374eadd6a345d9"
 | 
					  resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.0.3.tgz#e47246a15e55d0fff9fa204fd9ca06f90ff30c52"
 | 
				
			||||||
  integrity sha512-N9HbCK/FaXSRVI+k6Xq4QgWxbcZRUv+SfG1y7HJ28JdV8yEJu6k+C/YLea7npGckX2DQJeEVuMc4bKOBeU/2LQ==
 | 
					  integrity sha512-yh8V7CnE6EQMu9YDwQXhRxwZh4nv+8xm/HV4ZqK4IiYFJBWYGjJuykADJbSP+F/GDXUBwCSSNn/14IpGL81TuA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    safari-14-idb-fix "^1.0.4"
 | 
					    safari-14-idb-fix "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ignore@^4.0.6:
 | 
					ignore@^4.0.6:
 | 
				
			||||||
  version "4.0.6"
 | 
					  version "4.0.6"
 | 
				
			||||||
| 
						 | 
					@ -4069,10 +4078,10 @@ map-stream@~0.1.0:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
 | 
					  resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
 | 
				
			||||||
  integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
 | 
					  integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
matter-js@0.17.1:
 | 
					matter-js@0.18.0:
 | 
				
			||||||
  version "0.17.1"
 | 
					  version "0.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/matter-js/-/matter-js-0.17.1.tgz#b30ac4c708116258fbcaacd2efd8a94e34a91c7f"
 | 
					  resolved "https://registry.yarnpkg.com/matter-js/-/matter-js-0.18.0.tgz#083ced04eb6768f7664dc7ca8948a10e46ad3ed6"
 | 
				
			||||||
  integrity sha512-pSquoENJgvSAlQGcA0s5UkmEohGXZaUww2g3B6qG87x0iEcVf+aigMXn5UkFPdnh6w3B+C4vXSLaYqhHwKrOLA==
 | 
					  integrity sha512-/ZVem4WygUnbmo/iE4oHZpZS97btfBtYy5Iwn1396vUZU7YhgVEN8J4UWwfZwY1ZqoTYlPgjvSw9WXauuXL0mg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mdn-data@2.0.14:
 | 
					mdn-data@2.0.14:
 | 
				
			||||||
  version "2.0.14"
 | 
					  version "2.0.14"
 | 
				
			||||||
| 
						 | 
					@ -4158,10 +4167,10 @@ minimist@^1.2.0, minimist@^1.2.5:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
 | 
					  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
 | 
				
			||||||
  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 | 
					  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
misskey-js@0.0.10:
 | 
					misskey-js@0.0.12:
 | 
				
			||||||
  version "0.0.10"
 | 
					  version "0.0.12"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/misskey-js/-/misskey-js-0.0.10.tgz#f305dd37cecfbaeb7a277d5e0c769ca12c6eb9a6"
 | 
					  resolved "https://registry.yarnpkg.com/misskey-js/-/misskey-js-0.0.12.tgz#c8fc2fc823c69b0b7d1cb153a5a29afc33f0ff4d"
 | 
				
			||||||
  integrity sha512-2rdqFrCOwggMKYitsUPyupesqCNpNooqEHQQRfdjttbhiqLbNFJE1UuWQ04ffmiJ08UJt+1ZN2kVAYNEN3HRsg==
 | 
					  integrity sha512-Aq74/XskxaFN5CeCLeKPp5UP/xTFHvVnOV677G/zoSIShJRTeLsN5YnzwFpOVI2KN21JQ/ExesKDLoWlvQHtNA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    autobind-decorator "^2.4.0"
 | 
					    autobind-decorator "^2.4.0"
 | 
				
			||||||
    eventemitter3 "^4.0.7"
 | 
					    eventemitter3 "^4.0.7"
 | 
				
			||||||
| 
						 | 
					@ -4220,7 +4229,7 @@ ms@2.1.3, ms@^2.1.1:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
 | 
					  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
 | 
				
			||||||
  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
 | 
					  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mylas@^2.1.4:
 | 
					mylas@^2.1.6:
 | 
				
			||||||
  version "2.1.6"
 | 
					  version "2.1.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.6.tgz#40f3ac6faf77b966c2c2f7b9c0d21ea65b3d9800"
 | 
					  resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.6.tgz#40f3ac6faf77b966c2c2f7b9c0d21ea65b3d9800"
 | 
				
			||||||
  integrity sha512-5ggCu4hVRJZE6NpQ309y6ArykK5vujK6LfSAXvsrmBNSX/9Gfq7D9zjxhHyjSR/sbFzCe2hI9LO1EY9KXv/XkQ==
 | 
					  integrity sha512-5ggCu4hVRJZE6NpQ309y6ArykK5vujK6LfSAXvsrmBNSX/9Gfq7D9zjxhHyjSR/sbFzCe2hI9LO1EY9KXv/XkQ==
 | 
				
			||||||
| 
						 | 
					@ -5323,10 +5332,10 @@ s-age@1.1.2:
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/s-age/-/s-age-1.1.2.tgz#c0cf15233ccc93f41de92ea42c36d957977d1ea2"
 | 
					  resolved "https://registry.yarnpkg.com/s-age/-/s-age-1.1.2.tgz#c0cf15233ccc93f41de92ea42c36d957977d1ea2"
 | 
				
			||||||
  integrity sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==
 | 
					  integrity sha512-aSN2TlF39WLoZA/6cgYSJZhKt63kJ4EaadejPWjWY9/h4rksIqvfWY3gfd+3uAegSM1IXsA9aWeEhJtkxkFQtA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
safari-14-idb-fix@^1.0.4:
 | 
					safari-14-idb-fix@^3.0.0:
 | 
				
			||||||
  version "1.0.4"
 | 
					  version "3.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-1.0.4.tgz#5c68ba63e2a8ae0d89a0aa1e13fe89e3aef7da19"
 | 
					  resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
 | 
				
			||||||
  integrity sha512-4+Y2baQdgJpzu84d0QjySl70Kyygzf0pepVg8NVg4NnQEPpfC91fAn0baNvtStlCjUUxxiu0BOMiafa98fRRuA==
 | 
					  integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
safe-buffer@5.2.1:
 | 
					safe-buffer@5.2.1:
 | 
				
			||||||
  version "5.2.1"
 | 
					  version "5.2.1"
 | 
				
			||||||
| 
						 | 
					@ -5351,10 +5360,10 @@ sass-loader@12.4.0:
 | 
				
			||||||
    klona "^2.0.4"
 | 
					    klona "^2.0.4"
 | 
				
			||||||
    neo-async "^2.6.2"
 | 
					    neo-async "^2.6.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sass@1.45.1:
 | 
					sass@1.45.2:
 | 
				
			||||||
  version "1.45.1"
 | 
					  version "1.45.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.1.tgz#fa03951f924d1ba5762949567eaf660e608a1ab0"
 | 
					  resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.2.tgz#130b428c1692201cfa181139835d6fc378a33323"
 | 
				
			||||||
  integrity sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA==
 | 
					  integrity sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    chokidar ">=3.0.0 <4.0.0"
 | 
					    chokidar ">=3.0.0 <4.0.0"
 | 
				
			||||||
    immutable "^4.0.0"
 | 
					    immutable "^4.0.0"
 | 
				
			||||||
| 
						 | 
					@ -5915,16 +5924,16 @@ ts-node@10.4.0:
 | 
				
			||||||
    make-error "^1.1.1"
 | 
					    make-error "^1.1.1"
 | 
				
			||||||
    yn "3.1.1"
 | 
					    yn "3.1.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsc-alias@1.4.2:
 | 
					tsc-alias@1.5.0:
 | 
				
			||||||
  version "1.4.2"
 | 
					  version "1.5.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.4.2.tgz#80bac036f8d163a34a734a6772a57291313e084f"
 | 
					  resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.5.0.tgz#bc26f8dccf96e4ea350adc3f64ad3d2325cad967"
 | 
				
			||||||
  integrity sha512-6OyipS3p1E7679vk9c55zfQm9JtBAMK1MfgoKXucT4oyTL7TdFgQRcRT/urdWC9JaAtahr3aYqyEI22T82UFuA==
 | 
					  integrity sha512-Pb3y7ZjULKFHEV2US5dS58/hV76sE9Sn5iehiPjYqHcm/lx4eCGAJYoSmrVXQMPX+6baTnDFJD0MGOyqn94dIg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    chokidar "^3.5.2"
 | 
					    chokidar "^3.5.2"
 | 
				
			||||||
    commander "^8.2.0"
 | 
					    commander "^8.3.0"
 | 
				
			||||||
    find-node-modules "^2.1.2"
 | 
					    find-node-modules "^2.1.2"
 | 
				
			||||||
    globby "^11.0.4"
 | 
					    globby "^11.0.4"
 | 
				
			||||||
    mylas "^2.1.4"
 | 
					    mylas "^2.1.6"
 | 
				
			||||||
    normalize-path "^3.0.0"
 | 
					    normalize-path "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsconfig-paths@3.12.0:
 | 
					tsconfig-paths@3.12.0:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue