Merge branch 'develop' into watermark

This commit is contained in:
syuilo 2025-05-28 11:47:24 +09:00
commit 0a4ca368d4
42 changed files with 699 additions and 490 deletions

View File

@ -16,6 +16,7 @@
- デフォルトは**テキスト、JSON、画像、動画、音声ファイル**になっています。zipなど、その他の種別のファイルは含まれていないため、必要に応じて設定を変更してください。 - デフォルトは**テキスト、JSON、画像、動画、音声ファイル**になっています。zipなど、その他の種別のファイルは含まれていないため、必要に応じて設定を変更してください。
- 場合によってはファイル種別を正しく検出できないことがあります(特にテキストフォーマット)。その場合、ファイル種別は application/octet-stream と見做されます。 - 場合によってはファイル種別を正しく検出できないことがあります(特にテキストフォーマット)。その場合、ファイル種別は application/octet-stream と見做されます。
- したがって、それらの種別不明ファイルを許可したい場合は application/octet-stream を指定に追加してください。 - したがって、それらの種別不明ファイルを許可したい場合は application/octet-stream を指定に追加してください。
- Feat: プレビュー先がリダイレクトを伴う場合、リダイレクト先のコンテンツを取得しに行くか否かを設定できるように(#16043)
- Enhance: UIのアイコンデータの読み込みを軽量化 - Enhance: UIのアイコンデータの読み込みを軽量化
### Client ### Client

View File

@ -581,27 +581,6 @@ pnpm dlx typeorm migration:generate -d ormconfig.js -o <migration name>
- 生成後、ファイルをmigration下に移してください - 生成後、ファイルをmigration下に移してください
- 作成されたスクリプトは不必要な変更を含むため除去してください - 作成されたスクリプトは不必要な変更を含むため除去してください
### JSON SchemaのobjectでanyOfを使うとき
JSON Schemaで、objectに対してanyOfを使う場合、anyOfの中でpropertiesを定義しないこと。
バリデーションが効かないため。SchemaTypeもそのように作られており、objectのanyOf内のpropertiesは捨てられます
https://github.com/misskey-dev/misskey/pull/10082
テキストhogeおよびfugaについて、片方を必須としつつ両方の指定もありうる場合:
```ts
export const paramDef = {
type: 'object',
properties: {
hoge: { type: 'string', minLength: 1 },
fuga: { type: 'string', minLength: 1 },
},
anyOf: [
{ required: ['hoge'] },
{ required: ['fuga'] },
],
} as const;
```
### コネクションには`markRaw`せよ ### コネクションには`markRaw`せよ
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。 **Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。

8
locales/index.d.ts vendored
View File

@ -11236,6 +11236,14 @@ export interface Locale extends ILocale {
* URLプレビューを有効にする * URLプレビューを有効にする
*/ */
"enable": string; "enable": string;
/**
*
*/
"allowRedirect": string;
/**
* URLがリダイレクトされる場合に
*/
"allowRedirectDescription": string;
/** /**
* (ms) * (ms)
*/ */

View File

@ -2988,6 +2988,8 @@ _offlineScreen:
_urlPreviewSetting: _urlPreviewSetting:
title: "URLプレビューの設定" title: "URLプレビューの設定"
enable: "URLプレビューを有効にする" enable: "URLプレビューを有効にする"
allowRedirect: "プレビュー先のリダイレクトを許可"
allowRedirectDescription: "入力されたURLがリダイレクトされる場合に、そのリダイレクト先をたどってプレビューを表示するかどうかを設定します。無効にするとサーバーリソースの節約になりますが、リダイレクト先の内容は表示されなくなります。"
timeout: "プレビュー取得時のタイムアウト(ms)" timeout: "プレビュー取得時のタイムアウト(ms)"
timeoutDescription: "プレビュー取得の所要時間がこの値を超えた場合、プレビューは生成されません。" timeoutDescription: "プレビュー取得の所要時間がこの値を超えた場合、プレビューは生成されません。"
maximumContentLength: "Content-Lengthの最大値(byte)" maximumContentLength: "Content-Lengthの最大値(byte)"

View File

@ -17,4 +17,15 @@ args.push(...[
...process.argv.slice(2), ...process.argv.slice(2),
]); ]);
child_process.spawn(process.execPath, args, { stdio: 'inherit' }); const child = child_process.spawn(process.execPath, args, { stdio: 'inherit' });
child.on('error', (err) => {
console.error('Failed to start Jest:', err);
process.exit(1);
});
child.on('exit', (code, signal) => {
if (code === null) {
process.exit(128 + signal);
} else {
process.exit(code);
}
});

View File

@ -0,0 +1,16 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class AddUrlPreviewAllowRedirect1748310233000 {
name = 'AddUrlPreviewAllowRedirect1748310233000'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "urlPreviewAllowRedirect" boolean NOT NULL DEFAULT true`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "urlPreviewAllowRedirect"`);
}
}

View File

@ -67,8 +67,8 @@
"utf-8-validate": "6.0.5" "utf-8-validate": "6.0.5"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "3.815.0", "@aws-sdk/client-s3": "3.817.0",
"@aws-sdk/lib-storage": "3.815.0", "@aws-sdk/lib-storage": "3.817.0",
"@discordapp/twemoji": "15.1.0", "@discordapp/twemoji": "15.1.0",
"@fastify/accepts": "5.0.2", "@fastify/accepts": "5.0.2",
"@fastify/cookie": "11.0.2", "@fastify/cookie": "11.0.2",
@ -81,9 +81,9 @@
"@misskey-dev/sharp-read-bmp": "1.2.0", "@misskey-dev/sharp-read-bmp": "1.2.0",
"@misskey-dev/summaly": "5.2.1", "@misskey-dev/summaly": "5.2.1",
"@napi-rs/canvas": "0.1.70", "@napi-rs/canvas": "0.1.70",
"@nestjs/common": "11.1.1", "@nestjs/common": "11.1.2",
"@nestjs/core": "11.1.1", "@nestjs/core": "11.1.2",
"@nestjs/testing": "11.1.1", "@nestjs/testing": "11.1.2",
"@peertube/http-signature": "1.7.0", "@peertube/http-signature": "1.7.0",
"@sentry/node": "8.55.0", "@sentry/node": "8.55.0",
"@sentry/profiling-node": "8.55.0", "@sentry/profiling-node": "8.55.0",
@ -159,7 +159,7 @@
"qrcode": "1.5.4", "qrcode": "1.5.4",
"random-seed": "0.3.0", "random-seed": "0.3.0",
"ratelimiter": "3.4.1", "ratelimiter": "3.4.1",
"re2": "1.21.5", "re2": "1.22.1",
"redis-info": "3.1.0", "redis-info": "3.1.0",
"redis-lock": "0.1.4", "redis-lock": "0.1.4",
"reflect-metadata": "0.2.2", "reflect-metadata": "0.2.2",
@ -173,7 +173,7 @@
"slacc": "0.0.10", "slacc": "0.0.10",
"strict-event-emitter-types": "2.0.0", "strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0", "stringz": "2.1.0",
"systeminformation": "5.26.1", "systeminformation": "5.27.1",
"tinycolor2": "1.6.0", "tinycolor2": "1.6.0",
"tmp": "0.2.3", "tmp": "0.2.3",
"tsc-alias": "1.8.16", "tsc-alias": "1.8.16",
@ -188,7 +188,7 @@
}, },
"devDependencies": { "devDependencies": {
"@jest/globals": "29.7.0", "@jest/globals": "29.7.0",
"@nestjs/platform-express": "10.4.17", "@nestjs/platform-express": "10.4.18",
"@sentry/vue": "9.22.0", "@sentry/vue": "9.22.0",
"@simplewebauthn/types": "12.0.0", "@simplewebauthn/types": "12.0.0",
"@swc/jest": "0.2.38", "@swc/jest": "0.2.38",

View File

@ -218,7 +218,17 @@ type NullOrUndefined<p extends Schema, T> =
// https://stackoverflow.com/questions/54938141/typescript-convert-union-to-intersection // https://stackoverflow.com/questions/54938141/typescript-convert-union-to-intersection
// Get intersection from union // Get intersection from union
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
type PartialIntersection<T> = Partial<UnionToIntersection<T>>;
type ArrayToIntersection<T extends ReadonlyArray<Schema>> =
T extends readonly [infer Head, ...infer Tail]
? Head extends Schema
? Tail extends ReadonlyArray<Schema>
? Tail extends []
? SchemaType<Head>
: SchemaType<Head> & ArrayToIntersection<Tail>
: never
: never
: never;
// https://github.com/misskey-dev/misskey/pull/8144#discussion_r785287552 // https://github.com/misskey-dev/misskey/pull/8144#discussion_r785287552
// To get union, we use `Foo extends any ? Hoge<Foo> : never` // To get union, we use `Foo extends any ? Hoge<Foo> : never`
@ -236,8 +246,8 @@ type ObjectSchemaTypeDef<p extends Schema> =
: never : never
: ObjType<p['properties'], NonNullable<p['required']>> : ObjType<p['properties'], NonNullable<p['required']>>
: :
p['anyOf'] extends ReadonlyArray<Schema> ? never : // see CONTRIBUTING.md p['anyOf'] extends ReadonlyArray<Schema> ? UnionSchemaType<p['anyOf']> :
p['allOf'] extends ReadonlyArray<Schema> ? UnionToIntersection<UnionSchemaType<p['allOf']>> : p['allOf'] extends ReadonlyArray<Schema> ? ArrayToIntersection<p['allOf']> :
p['additionalProperties'] extends true ? Record<string, any> : p['additionalProperties'] extends true ? Record<string, any> :
p['additionalProperties'] extends Schema ? p['additionalProperties'] extends Schema ?
p['additionalProperties'] extends infer AdditionalProperties ? p['additionalProperties'] extends infer AdditionalProperties ?
@ -277,7 +287,8 @@ export type SchemaTypeDef<p extends Schema> =
p['items'] extends NonNullable<Schema> ? SchemaType<p['items']>[] : p['items'] extends NonNullable<Schema> ? SchemaType<p['items']>[] :
any[] any[]
) : ) :
p['anyOf'] extends ReadonlyArray<Schema> ? UnionSchemaType<p['anyOf']> & PartialIntersection<UnionSchemaType<p['anyOf']>> : p['anyOf'] extends ReadonlyArray<Schema> ? UnionSchemaType<p['anyOf']> :
p['allOf'] extends ReadonlyArray<Schema> ? ArrayToIntersection<p['allOf']> :
p['oneOf'] extends ReadonlyArray<Schema> ? UnionSchemaType<p['oneOf']> : p['oneOf'] extends ReadonlyArray<Schema> ? UnionSchemaType<p['oneOf']> :
any; any;

View File

@ -619,6 +619,11 @@ export class MiMeta {
}) })
public urlPreviewEnabled: boolean; public urlPreviewEnabled: boolean;
@Column('boolean', {
default: true,
})
public urlPreviewAllowRedirect: boolean;
@Column('integer', { @Column('integer', {
default: 10000, default: 10000,
}) })

View File

@ -162,14 +162,21 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
url: { type: 'string' },
},
anyOf: [ anyOf: [
{ required: ['fileId'] }, {
{ required: ['url'] }, type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
},
required: ['fileId'],
},
{
type: 'object',
properties: {
url: { type: 'string' },
},
required: ['url'],
},
], ],
} as const; } as const;
@ -186,15 +193,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private idService: IdService, private idService: IdService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
const file = ps.fileId ? await this.driveFilesRepository.findOneBy({ id: ps.fileId }) : await this.driveFilesRepository.findOne({ const file = await this.driveFilesRepository.findOneBy(
where: [{ 'fileId' in ps
url: ps.url, ? { id: ps.fileId }
}, { : [{ url: ps.url }, { thumbnailUrl: ps.url }, { webpublicUrl: ps.url }],
thumbnailUrl: ps.url, );
}, {
webpublicUrl: ps.url,
}],
});
if (file == null) { if (file == null) {
throw new ApiError(meta.errors.noSuchFile); throw new ApiError(meta.errors.noSuchFile);

View File

@ -37,29 +37,45 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
id: { type: 'string', format: 'misskey:id' }, anyOf: [
name: { type: 'string', pattern: '^[a-zA-Z0-9_]+$' }, {
fileId: { type: 'string', format: 'misskey:id' }, type: 'object',
category: { properties: {
type: 'string', id: { type: 'string', format: 'misskey:id' },
nullable: true, },
description: 'Use `null` to reset the category.', required: ['id'],
},
{
type: 'object',
properties: {
name: { type: 'string', pattern: '^[a-zA-Z0-9_]+$' },
},
required: ['name'],
},
],
},
{
type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
category: {
type: 'string',
nullable: true,
description: 'Use `null` to reset the category.',
},
aliases: { type: 'array', items: {
type: 'string',
} },
license: { type: 'string', nullable: true },
isSensitive: { type: 'boolean' },
localOnly: { type: 'boolean' },
roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
type: 'string',
} },
},
}, },
aliases: { type: 'array', items: {
type: 'string',
} },
license: { type: 'string', nullable: true },
isSensitive: { type: 'boolean' },
localOnly: { type: 'boolean' },
roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
type: 'string',
} },
},
anyOf: [
{ required: ['id'] },
{ required: ['name'] },
], ],
} as const; } as const;
@ -78,10 +94,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (driveFile == null) throw new ApiError(meta.errors.noSuchFile); if (driveFile == null) throw new ApiError(meta.errors.noSuchFile);
} }
// JSON schemeのanyOfの型変換がうまくいっていないらしい const required = 'id' in ps
const required = { id: ps.id, name: ps.name } as ? { id: ps.id, name: 'name' in ps ? ps.name as string : undefined }
| { id: MiEmoji['id']; name?: string } : { name: ps.name };
| { id?: MiEmoji['id']; name: string };
const error = await this.customEmojiService.update({ const error = await this.customEmojiService.update({
...required, ...required,

View File

@ -495,6 +495,10 @@ export const meta = {
type: 'boolean', type: 'boolean',
optional: false, nullable: false, optional: false, nullable: false,
}, },
urlPreviewAllowRedirect: {
type: 'boolean',
optional: false, nullable: false,
},
urlPreviewTimeout: { urlPreviewTimeout: {
type: 'number', type: 'number',
optional: false, nullable: false, optional: false, nullable: false,
@ -704,6 +708,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
notesPerOneAd: instance.notesPerOneAd, notesPerOneAd: instance.notesPerOneAd,
summalyProxy: instance.urlPreviewSummaryProxyUrl, summalyProxy: instance.urlPreviewSummaryProxyUrl,
urlPreviewEnabled: instance.urlPreviewEnabled, urlPreviewEnabled: instance.urlPreviewEnabled,
urlPreviewAllowRedirect: instance.urlPreviewAllowRedirect,
urlPreviewTimeout: instance.urlPreviewTimeout, urlPreviewTimeout: instance.urlPreviewTimeout,
urlPreviewMaximumContentLength: instance.urlPreviewMaximumContentLength, urlPreviewMaximumContentLength: instance.urlPreviewMaximumContentLength,
urlPreviewRequireContentLength: instance.urlPreviewRequireContentLength, urlPreviewRequireContentLength: instance.urlPreviewRequireContentLength,

View File

@ -170,6 +170,7 @@ export const paramDef = {
description: '[Deprecated] Use "urlPreviewSummaryProxyUrl" instead.', description: '[Deprecated] Use "urlPreviewSummaryProxyUrl" instead.',
}, },
urlPreviewEnabled: { type: 'boolean' }, urlPreviewEnabled: { type: 'boolean' },
urlPreviewAllowRedirect: { type: 'boolean' },
urlPreviewTimeout: { type: 'integer' }, urlPreviewTimeout: { type: 'integer' },
urlPreviewMaximumContentLength: { type: 'integer' }, urlPreviewMaximumContentLength: { type: 'integer' },
urlPreviewRequireContentLength: { type: 'boolean' }, urlPreviewRequireContentLength: { type: 'boolean' },
@ -664,6 +665,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.urlPreviewEnabled = ps.urlPreviewEnabled; set.urlPreviewEnabled = ps.urlPreviewEnabled;
} }
if (ps.urlPreviewAllowRedirect !== undefined) {
set.urlPreviewAllowRedirect = ps.urlPreviewAllowRedirect;
}
if (ps.urlPreviewTimeout !== undefined) { if (ps.urlPreviewTimeout !== undefined) {
set.urlPreviewTimeout = ps.urlPreviewTimeout; set.urlPreviewTimeout = ps.urlPreviewTimeout;
} }

View File

@ -43,14 +43,21 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
url: { type: 'string' },
},
anyOf: [ anyOf: [
{ required: ['fileId'] }, {
{ required: ['url'] }, type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
},
required: ['fileId'],
},
{
type: 'object',
properties: {
url: { type: 'string' },
},
required: ['url'],
},
], ],
} as const; } as const;
@ -64,21 +71,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private roleService: RoleService, private roleService: RoleService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
let file: MiDriveFile | null = null; const file = await this.driveFilesRepository.findOneBy(
'fileId' in ps
if (ps.fileId) { ? { id: ps.fileId }
file = await this.driveFilesRepository.findOneBy({ id: ps.fileId }); : [{ url: ps.url }, { webpublicUrl: ps.url }, { thumbnailUrl: ps.url }],
} else if (ps.url) { );
file = await this.driveFilesRepository.findOne({
where: [{
url: ps.url,
}, {
webpublicUrl: ps.url,
}, {
thumbnailUrl: ps.url,
}],
});
}
if (file == null) { if (file == null) {
throw new ApiError(meta.errors.noSuchFile); throw new ApiError(meta.errors.noSuchFile);

View File

@ -15,14 +15,21 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object',
properties: {
tokenId: { type: 'string', format: 'misskey:id' },
token: { type: 'string', nullable: true },
},
anyOf: [ anyOf: [
{ required: ['tokenId'] }, {
{ required: ['token'] }, type: 'object',
properties: {
tokenId: { type: 'string', format: 'misskey:id' },
},
required: ['tokenId'],
},
{
type: 'object',
properties: {
token: { type: 'string', nullable: true },
},
required: ['token'],
},
], ],
} as const; } as const;
@ -33,7 +40,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private accessTokensRepository: AccessTokensRepository, private accessTokensRepository: AccessTokensRepository,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
if (ps.tokenId) { if ('tokenId' in ps) {
const tokenExist = await this.accessTokensRepository.exists({ where: { id: ps.tokenId } }); const tokenExist = await this.accessTokensRepository.exists({ where: { id: ps.tokenId } });
if (tokenExist) { if (tokenExist) {

View File

@ -28,38 +28,53 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
reply: { type: 'boolean', nullable: true, default: null }, anyOf: [
renote: { type: 'boolean', nullable: true, default: null }, {
withFiles: { type: 'object',
type: 'boolean', properties: {
default: false, tag: { type: 'string', minLength: 1 },
description: 'Only show notes that have attached files.', },
}, required: ['tag'],
poll: { type: 'boolean', nullable: true, default: null },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
tag: { type: 'string', minLength: 1 },
query: {
type: 'array',
description: 'The outer arrays are chained with OR, the inner arrays are chained with AND.',
items: {
type: 'array',
items: {
type: 'string',
minLength: 1,
}, },
minItems: 1, {
}, type: 'object',
minItems: 1, properties: {
query: {
type: 'array',
description: 'The outer arrays are chained with OR, the inner arrays are chained with AND.',
items: {
type: 'array',
items: {
type: 'string',
minLength: 1,
},
minItems: 1,
},
minItems: 1,
},
},
required: ['query'],
},
],
},
{
type: 'object',
properties: {
reply: { type: 'boolean', nullable: true, default: null },
renote: { type: 'boolean', nullable: true, default: null },
withFiles: {
type: 'boolean',
default: false,
description: 'Only show notes that have attached files.',
},
poll: { type: 'boolean', nullable: true, default: null },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
},
}, },
},
anyOf: [
{ required: ['tag'] },
{ required: ['query'] },
], ],
} as const; } as const;
@ -87,12 +102,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (me) this.queryService.generateBlockedUserQueryForNotes(query, me); if (me) this.queryService.generateBlockedUserQueryForNotes(query, me);
try { try {
if (ps.tag) { if ('tag' in ps) {
if (!safeForSql(normalizeForSearch(ps.tag))) throw new Error('Injection'); if (!safeForSql(normalizeForSearch(ps.tag))) throw new Error('Injection');
query.andWhere(':tag <@ note.tags', { tag: [normalizeForSearch(ps.tag)] }); query.andWhere(':tag <@ note.tags', { tag: [normalizeForSearch(ps.tag)] });
} else { } else {
query.andWhere(new Brackets(qb => { query.andWhere(new Brackets(qb => {
for (const tags of ps.query!) { for (const tags of ps.query) {
qb.orWhere(new Brackets(qb => { qb.orWhere(new Brackets(qb => {
for (const tag of tags) { for (const tag of tags) {
if (!safeForSql(normalizeForSearch(tag))) throw new Error('Injection'); if (!safeForSql(normalizeForSearch(tag))) throw new Error('Injection');

View File

@ -33,15 +33,22 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object',
properties: {
pageId: { type: 'string', format: 'misskey:id' },
name: { type: 'string' },
username: { type: 'string' },
},
anyOf: [ anyOf: [
{ required: ['pageId'] }, {
{ required: ['name', 'username'] }, type: 'object',
properties: {
pageId: { type: 'string', format: 'misskey:id' },
},
required: ['pageId'],
},
{
type: 'object',
properties: {
name: { type: 'string' },
username: { type: 'string' },
},
required: ['name', 'username'],
},
], ],
} as const; } as const;
@ -59,9 +66,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
let page: MiPage | null = null; let page: MiPage | null = null;
if (ps.pageId) { if ('pageId' in ps) {
page = await this.pagesRepository.findOneBy({ id: ps.pageId }); page = await this.pagesRepository.findOneBy({ id: ps.pageId });
} else if (ps.name && ps.username) { } else {
const author = await this.usersRepository.findOneBy({ const author = await this.usersRepository.findOneBy({
host: IsNull(), host: IsNull(),
usernameLower: ps.username.toLowerCase(), usernameLower: ps.username.toLowerCase(),

View File

@ -47,23 +47,38 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
sinceId: { type: 'string', format: 'misskey:id' }, anyOf: [
untilId: { type: 'string', format: 'misskey:id' }, {
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, type: 'object',
properties: {
userId: { type: 'string', format: 'misskey:id' }, userId: { type: 'string', format: 'misskey:id' },
username: { type: 'string' }, },
host: { required: ['userId'],
type: 'string', },
nullable: true, {
description: 'The local host is represented with `null`.', type: 'object',
properties: {
username: { type: 'string' },
host: {
type: 'string',
nullable: true,
description: 'The local host is represented with `null`.',
},
},
required: ['username', 'host'],
},
],
},
{
type: 'object',
properties: {
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
},
}, },
},
anyOf: [
{ required: ['userId'] },
{ required: ['username', 'host'] },
], ],
} as const; } as const;
@ -85,9 +100,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private roleService: RoleService, private roleService: RoleService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy(ps.userId != null const user = await this.usersRepository.findOneBy('userId' in ps
? { id: ps.userId } ? { id: ps.userId }
: { usernameLower: ps.username!.toLowerCase(), host: this.utilityService.toPunyNullable(ps.host) ?? IsNull() }); : { usernameLower: ps.username.toLowerCase(), host: this.utilityService.toPunyNullable(ps.host) ?? IsNull() });
if (user == null) { if (user == null) {
throw new ApiError(meta.errors.noSuchUser); throw new ApiError(meta.errors.noSuchUser);

View File

@ -54,25 +54,39 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
sinceId: { type: 'string', format: 'misskey:id' }, anyOf: [
untilId: { type: 'string', format: 'misskey:id' }, {
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, type: 'object',
properties: {
userId: { type: 'string', format: 'misskey:id' }, userId: { type: 'string', format: 'misskey:id' },
username: { type: 'string' }, },
host: { required: ['userId'],
type: 'string', },
nullable: true, {
description: 'The local host is represented with `null`.', type: 'object',
properties: {
username: { type: 'string' },
host: {
type: 'string',
nullable: true,
description: 'The local host is represented with `null`.',
},
},
required: ['username', 'host'],
},
],
},
{
type: 'object',
properties: {
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
birthday: { ...birthdaySchema, nullable: true },
},
}, },
birthday: { ...birthdaySchema, nullable: true },
},
anyOf: [
{ required: ['userId'] },
{ required: ['username', 'host'] },
], ],
} as const; } as const;
@ -94,9 +108,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private roleService: RoleService, private roleService: RoleService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy(ps.userId != null const user = await this.usersRepository.findOneBy('userId' in ps
? { id: ps.userId } ? { id: ps.userId }
: { usernameLower: ps.username!.toLowerCase(), host: this.utilityService.toPunyNullable(ps.host) ?? IsNull() }); : { usernameLower: ps.username.toLowerCase(), host: this.utilityService.toPunyNullable(ps.host) ?? IsNull() });
if (user == null) { if (user == null) {
throw new ApiError(meta.errors.noSuchUser); throw new ApiError(meta.errors.noSuchUser);

View File

@ -114,7 +114,7 @@ export const paramDef = {
type: 'object', type: 'object',
properties: { properties: {
userId: { userId: {
anyOf: [ oneOf: [
{ type: 'string', format: 'misskey:id' }, { type: 'string', format: 'misskey:id' },
{ {
type: 'array', type: 'array',

View File

@ -26,17 +26,32 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, anyOf: [
detail: { type: 'boolean', default: true }, {
type: 'object',
username: { type: 'string', nullable: true }, properties: {
host: { type: 'string', nullable: true }, username: { type: 'string', nullable: true },
}, },
anyOf: [ required: ['username'],
{ required: ['username'] }, },
{ required: ['host'] }, {
type: 'object',
properties: {
host: { type: 'string', nullable: true },
},
required: ['host'],
},
],
},
{
type: 'object',
properties: {
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
detail: { type: 'boolean', default: true },
},
},
], ],
} as const; } as const;
@ -47,8 +62,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
) { ) {
super(meta, paramDef, (ps, me) => { super(meta, paramDef, (ps, me) => {
return this.userSearchService.searchByUsernameAndHost({ return this.userSearchService.searchByUsernameAndHost({
username: ps.username, username: 'username' in ps ? ps.username : undefined,
host: ps.host, host: 'host' in ps ? ps.host : undefined,
}, { }, {
limit: ps.limit, limit: ps.limit,
detail: ps.detail, detail: ps.detail,

View File

@ -0,0 +1,23 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
process.env.NODE_ENV = 'test';
import { getValidator } from '../../../../../test/prelude/get-api-validator.js';
import { paramDef } from './show.js';
const VALID = true;
const INVALID = false;
describe('api:users/show', () => {
describe('validation', () => {
const v = getValidator(paramDef);
test('Reject empty', () => expect(v({})).toBe(INVALID));
test('Reject host only', () => expect(v({ host: 'misskey.test' })).toBe(INVALID));
test('Accept userId only', () => expect(v({ userId: '1' })).toBe(VALID));
test('Accept username and host', () => expect(v({ username: 'alice', host: 'misskey.test' })).toBe(VALID));
});
});

View File

@ -59,23 +59,44 @@ export const meta = {
} as const; } as const;
export const paramDef = { export const paramDef = {
type: 'object', allOf: [
properties: { {
userId: { type: 'string', format: 'misskey:id' }, anyOf: [
userIds: { type: 'array', uniqueItems: true, items: { {
type: 'string', format: 'misskey:id', type: 'object',
} }, properties: {
username: { type: 'string' }, userId: { type: 'string', format: 'misskey:id' },
host: { },
type: 'string', required: ['userId'],
nullable: true, },
description: 'The local host is represented with `null`.', {
type: 'object',
properties: {
userIds: { type: 'array', uniqueItems: true, items: {
type: 'string', format: 'misskey:id',
} },
},
required: ['userIds'],
},
{
type: 'object',
properties: {
username: { type: 'string' },
},
required: ['username'],
},
],
},
{
type: 'object',
properties: {
host: {
type: 'string',
nullable: true,
description: 'The local host is represented with `null`.',
},
},
}, },
},
anyOf: [
{ required: ['userId'] },
{ required: ['userIds'] },
{ required: ['username'] },
], ],
} as const; } as const;
@ -102,9 +123,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
let user; let user;
const isModerator = await this.roleService.isModerator(me); const isModerator = await this.roleService.isModerator(me);
ps.username = ps.username?.trim(); if ('username' in ps) {
ps.username = ps.username.trim();
}
if (ps.userIds) { if ('userIds' in ps) {
if (ps.userIds.length === 0) { if (ps.userIds.length === 0) {
return []; return [];
} }
@ -129,7 +152,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
return _users.map(u => _userMap.get(u.id)!); return _users.map(u => _userMap.get(u.id)!);
} else { } else {
// Lookup user // Lookup user
if (typeof ps.host === 'string' && typeof ps.username === 'string') { if (typeof ps.host === 'string' && 'username' in ps) {
if (this.serverSettings.ugcVisibilityForVisitor === 'local' && me == null) { if (this.serverSettings.ugcVisibilityForVisitor === 'local' && me == null) {
throw new ApiError(meta.errors.noSuchUser); throw new ApiError(meta.errors.noSuchUser);
} }
@ -139,7 +162,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new ApiError(meta.errors.failedToResolveRemoteUser); throw new ApiError(meta.errors.failedToResolveRemoteUser);
}); });
} else { } else {
const q: FindOptionsWhere<MiUser> = ps.userId != null const q: FindOptionsWhere<MiUser> = 'userId' in ps
? { id: ps.userId } ? { id: ps.userId }
: { usernameLower: ps.username!.toLowerCase(), host: IsNull() }; : { usernameLower: ps.username!.toLowerCase(), host: IsNull() };

View File

@ -89,7 +89,8 @@ export function genOpenapiSpec(config: Config, includeSelfRef = false) {
schema.required = undefined; schema.required = undefined;
} }
const hasBody = (schema.type === 'object' && schema.properties && Object.keys(schema.properties).length >= 1); const hasBody = (schema.type === 'object' && schema.properties && Object.keys(schema.properties).length >= 1)
|| ['allOf', 'oneOf', 'anyOf'].some(o => (Array.isArray(schema[o]) && schema[o].length >= 0));
const info = { const info = {
operationId: endpoint.name.replaceAll('/', '___'), // NOTE: スラッシュは使えない operationId: endpoint.name.replaceAll('/', '___'), // NOTE: スラッシュは使えない

View File

@ -122,7 +122,7 @@ export class UrlPreviewService {
: undefined; : undefined;
return summaly(url, { return summaly(url, {
followRedirects: false, followRedirects: this.meta.urlPreviewAllowRedirect,
lang: lang ?? 'ja-JP', lang: lang ?? 'ja-JP',
agent: agent, agent: agent,
userAgent: meta.urlPreviewUserAgent ?? undefined, userAgent: meta.urlPreviewUserAgent ?? undefined,
@ -137,6 +137,7 @@ export class UrlPreviewService {
const queryStr = query({ const queryStr = query({
url: url, url: url,
lang: lang ?? 'ja-JP', lang: lang ?? 'ja-JP',
followRedirects: this.meta.urlPreviewAllowRedirect,
userAgent: meta.urlPreviewUserAgent ?? undefined, userAgent: meta.urlPreviewUserAgent ?? undefined,
operationTimeout: meta.urlPreviewTimeout, operationTimeout: meta.urlPreviewTimeout,
contentLengthLimit: meta.urlPreviewMaximumContentLength, contentLengthLimit: meta.urlPreviewMaximumContentLength,

View File

@ -162,10 +162,10 @@ describe('AbuseReportNotificationService', () => {
emailService.sendEmail.mockClear(); emailService.sendEmail.mockClear();
webhookService.enqueueSystemWebhook.mockClear(); webhookService.enqueueSystemWebhook.mockClear();
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await userProfilesRepository.delete({}); await userProfilesRepository.createQueryBuilder().delete().execute();
await systemWebhooksRepository.delete({}); await systemWebhooksRepository.createQueryBuilder().delete().execute();
await abuseReportNotificationRecipientRepository.delete({}); await abuseReportNotificationRecipientRepository.createQueryBuilder().delete().execute();
}); });
afterAll(async () => { afterAll(async () => {

View File

@ -103,10 +103,10 @@ describe('AnnouncementService', () => {
afterEach(async () => { afterEach(async () => {
await Promise.all([ await Promise.all([
app.get(DI.metasRepository).delete({}), app.get(DI.metasRepository).createQueryBuilder().delete().execute(),
usersRepository.delete({}), usersRepository.createQueryBuilder().delete().execute(),
announcementsRepository.delete({}), announcementsRepository.createQueryBuilder().delete().execute(),
announcementReadsRepository.delete({}), announcementReadsRepository.createQueryBuilder().delete().execute(),
]); ]);
await app.close(); await app.close();

View File

@ -86,7 +86,7 @@ describe('CustomEmojiService', () => {
} }
afterEach(async () => { afterEach(async () => {
await emojisRepository.delete({}); await emojisRepository.createQueryBuilder().delete().execute();
}); });
describe('単独', () => { describe('単独', () => {

View File

@ -85,9 +85,9 @@ describe('FlashService', () => {
}); });
afterEach(async () => { afterEach(async () => {
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await userProfilesRepository.delete({}); await userProfilesRepository.createQueryBuilder().delete().execute();
await flashsRepository.delete({}); await flashsRepository.createQueryBuilder().delete().execute();
}); });
afterAll(async () => { afterAll(async () => {

View File

@ -159,10 +159,10 @@ describe('RoleService', () => {
clock.uninstall(); clock.uninstall();
await Promise.all([ await Promise.all([
app.get(DI.metasRepository).delete({}), app.get(DI.metasRepository).createQueryBuilder().delete().execute(),
usersRepository.delete({}), usersRepository.createQueryBuilder().delete().execute(),
rolesRepository.delete({}), rolesRepository.createQueryBuilder().delete().execute(),
roleAssignmentsRepository.delete({}), roleAssignmentsRepository.createQueryBuilder().delete().execute(),
]); ]);
await app.close(); await app.close();

View File

@ -101,8 +101,8 @@ describe('SystemWebhookService', () => {
} }
async function afterEachImpl() { async function afterEachImpl() {
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await systemWebhooksRepository.delete({}); await systemWebhooksRepository.createQueryBuilder().delete().execute();
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------

View File

@ -127,7 +127,7 @@ describe('UserSearchService', () => {
}); });
afterEach(async () => { afterEach(async () => {
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
}); });
afterAll(async () => { afterAll(async () => {

View File

@ -95,8 +95,8 @@ describe('UserWebhookService', () => {
} }
async function afterEachImpl() { async function afterEachImpl() {
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await userWebhooksRepository.delete({}); await userWebhooksRepository.createQueryBuilder().delete().execute();
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------

View File

@ -111,8 +111,8 @@ describe('WebhookTestService', () => {
userWebhookService.fetchWebhooks.mockClear(); userWebhookService.fetchWebhooks.mockClear();
systemWebhookService.fetchSystemWebhooks.mockClear(); systemWebhookService.fetchSystemWebhooks.mockClear();
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await userProfilesRepository.delete({}); await userProfilesRepository.createQueryBuilder().delete().execute();
}); });
afterAll(async () => { afterAll(async () => {

View File

@ -157,8 +157,8 @@ describe('CheckModeratorsActivityProcessorService', () => {
afterEach(async () => { afterEach(async () => {
clock.uninstall(); clock.uninstall();
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
await userProfilesRepository.delete({}); await userProfilesRepository.createQueryBuilder().delete().execute();
roleService.getModerators.mockReset(); roleService.getModerators.mockReset();
announcementService.create.mockReset(); announcementService.create.mockReset();
emailService.sendEmail.mockReset(); emailService.sendEmail.mockReset();

View File

@ -41,7 +41,7 @@ describe('/drive/files/create', () => {
idService = module.get(IdService); idService = module.get(IdService);
const usersRepository = module.get<UsersRepository>(DI.usersRepository); const usersRepository = module.get<UsersRepository>(DI.usersRepository);
await usersRepository.delete({}); await usersRepository.createQueryBuilder().delete().execute();
root = await usersRepository.insert({ root = await usersRepository.insert({
id: idService.gen(), id: idService.gen(),
username: 'root', username: 'root',
@ -50,7 +50,7 @@ describe('/drive/files/create', () => {
}).then(x => usersRepository.findOneByOrFail(x.identifiers[0])); }).then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
const userProfilesRepository = module.get<UserProfilesRepository>(DI.userProfilesRepository); const userProfilesRepository = module.get<UserProfilesRepository>(DI.userProfilesRepository);
await userProfilesRepository.delete({}); await userProfilesRepository.createQueryBuilder().delete().execute();
await userProfilesRepository.insert({ await userProfilesRepository.insert({
userId: root.id, userId: root.id,
}); });

View File

@ -66,9 +66,15 @@ export function getConfig(): UserConfig {
return { return {
base: '/embed_vite/', base: '/embed_vite/',
// The console is shared with backend, so clearing the console will also clear the backend log.
clearScreen: false,
server: { server: {
host, // The backend allows access from any addresses, so vite also allows access from any addresses.
host: '0.0.0.0',
allowedHosts: host ? [host] : undefined,
port: 5174, port: 5174,
strictPort: true,
hmr: { hmr: {
// バックエンド経由での起動時、Viteは5174経由でアセットを参照していると思い込んでいるが実際は3000から配信される // バックエンド経由での起動時、Viteは5174経由でアセットを参照していると思い込んでいるが実際は3000から配信される
// そのため、バックエンドのWSサーバーにHMRのWSリクエストが吸収されてしまい、正しくHMRが機能しない // そのため、バックエンドのWSサーバーにHMRのWSリクエストが吸収されてしまい、正しくHMRが機能しない

View File

@ -146,6 +146,11 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkSwitch> </MkSwitch>
<template v-if="urlPreviewForm.state.urlPreviewEnabled"> <template v-if="urlPreviewForm.state.urlPreviewEnabled">
<MkSwitch v-model="urlPreviewForm.state.urlPreviewAllowRedirect">
<template #label>{{ i18n.ts._urlPreviewSetting.allowRedirect }}<span v-if="urlPreviewForm.modifiedStates.urlPreviewAllowRedirect" class="_modified">{{ i18n.ts.modified }}</span></template>
<template #caption>{{ i18n.ts._urlPreviewSetting.allowRedirectDescription }}</template>
</MkSwitch>
<MkSwitch v-model="urlPreviewForm.state.urlPreviewRequireContentLength"> <MkSwitch v-model="urlPreviewForm.state.urlPreviewRequireContentLength">
<template #label>{{ i18n.ts._urlPreviewSetting.requireContentLength }}<span v-if="urlPreviewForm.modifiedStates.urlPreviewRequireContentLength" class="_modified">{{ i18n.ts.modified }}</span></template> <template #label>{{ i18n.ts._urlPreviewSetting.requireContentLength }}<span v-if="urlPreviewForm.modifiedStates.urlPreviewRequireContentLength" class="_modified">{{ i18n.ts.modified }}</span></template>
<template #caption>{{ i18n.ts._urlPreviewSetting.requireContentLengthDescription }}</template> <template #caption>{{ i18n.ts._urlPreviewSetting.requireContentLengthDescription }}</template>
@ -288,7 +293,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed, reactive } from 'vue'; import { computed } from 'vue';
import MkSwitch from '@/components/MkSwitch.vue'; import MkSwitch from '@/components/MkSwitch.vue';
import MkInput from '@/components/MkInput.vue'; import MkInput from '@/components/MkInput.vue';
import MkTextarea from '@/components/MkTextarea.vue'; import MkTextarea from '@/components/MkTextarea.vue';
@ -301,7 +306,6 @@ import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js'; import { definePage } from '@/page.js';
import MkButton from '@/components/MkButton.vue'; import MkButton from '@/components/MkButton.vue';
import MkFolder from '@/components/MkFolder.vue'; import MkFolder from '@/components/MkFolder.vue';
import MkKeyValue from '@/components/MkKeyValue.vue';
import { useForm } from '@/composables/use-form.js'; import { useForm } from '@/composables/use-form.js';
import MkFormFooter from '@/components/MkFormFooter.vue'; import MkFormFooter from '@/components/MkFormFooter.vue';
import MkRadios from '@/components/MkRadios.vue'; import MkRadios from '@/components/MkRadios.vue';
@ -370,6 +374,7 @@ const adForm = useForm({
const urlPreviewForm = useForm({ const urlPreviewForm = useForm({
urlPreviewEnabled: meta.urlPreviewEnabled, urlPreviewEnabled: meta.urlPreviewEnabled,
urlPreviewAllowRedirect: meta.urlPreviewAllowRedirect,
urlPreviewTimeout: meta.urlPreviewTimeout, urlPreviewTimeout: meta.urlPreviewTimeout,
urlPreviewMaximumContentLength: meta.urlPreviewMaximumContentLength, urlPreviewMaximumContentLength: meta.urlPreviewMaximumContentLength,
urlPreviewRequireContentLength: meta.urlPreviewRequireContentLength, urlPreviewRequireContentLength: meta.urlPreviewRequireContentLength,
@ -378,6 +383,7 @@ const urlPreviewForm = useForm({
}, async (state) => { }, async (state) => {
await os.apiWithDialog('admin/update-meta', { await os.apiWithDialog('admin/update-meta', {
urlPreviewEnabled: state.urlPreviewEnabled, urlPreviewEnabled: state.urlPreviewEnabled,
urlPreviewAllowRedirect: state.urlPreviewAllowRedirect,
urlPreviewTimeout: state.urlPreviewTimeout, urlPreviewTimeout: state.urlPreviewTimeout,
urlPreviewMaximumContentLength: state.urlPreviewMaximumContentLength, urlPreviewMaximumContentLength: state.urlPreviewMaximumContentLength,
urlPreviewRequireContentLength: state.urlPreviewRequireContentLength, urlPreviewRequireContentLength: state.urlPreviewRequireContentLength,

View File

@ -9,24 +9,12 @@ import { apiUrl } from '@@/js/config.js';
import { $i } from '@/i.js'; import { $i } from '@/i.js';
export const pendingApiRequestsCount = ref(0); export const pendingApiRequestsCount = ref(0);
export type Endpoint = keyof Misskey.Endpoints;
export type Request<E extends Endpoint> = Misskey.Endpoints[E]['req'];
export type AnyRequest<E extends Endpoint | (string & unknown)> =
(E extends Endpoint ? Request<E> : never) | object;
export type Response<E extends Endpoint | (string & unknown), P extends AnyRequest<E>> =
E extends Endpoint
? P extends Request<E> ? Misskey.api.SwitchCaseResponseType<E, P> : never
: object;
// Implements Misskey.api.ApiClient.request // Implements Misskey.api.ApiClient.request
export function misskeyApi< export function misskeyApi<
ResT = void, ResT = void,
E extends Endpoint | NonNullable<string> = Endpoint, E extends keyof Misskey.Endpoints = keyof Misskey.Endpoints,
P extends AnyRequest<E> = E extends Endpoint ? Request<E> : never, P extends Misskey.Endpoints[E]['req'] = Misskey.Endpoints[E]['req'],
_ResT = ResT extends void ? Response<E, P> : ResT, _ResT = ResT extends void ? Misskey.api.SwitchCaseResponseType<E, P> : ResT,
>( >(
endpoint: E, endpoint: E,
data: P & { i?: string | null; } = {} as any, data: P & { i?: string | null; } = {} as any,

View File

@ -81,9 +81,15 @@ export function getConfig(): UserConfig {
return { return {
base: '/vite/', base: '/vite/',
// The console is shared with backend, so clearing the console will also clear the backend log.
clearScreen: false,
server: { server: {
host, // The backend allows access from any addresses, so vite also allows access from any addresses.
host: '0.0.0.0',
allowedHosts: host ? [host] : undefined,
port: 5173, port: 5173,
strictPort: true,
hmr: { hmr: {
// バックエンド経由での起動時、Viteは5173経由でアセットを参照していると思い込んでいるが実際は3000から配信される // バックエンド経由での起動時、Viteは5173経由でアセットを参照していると思い込んでいるが実際は3000から配信される
// そのため、バックエンドのWSサーバーにHMRのWSリクエストが吸収されてしまい、正しくHMRが機能しない // そのため、バックエンドのWSサーバーにHMRのWSリクエストが吸収されてしまい、正しくHMRが機能しない

View File

@ -7306,8 +7306,9 @@ export type operations = {
content: { content: {
'application/json': { 'application/json': {
/** Format: misskey:id */ /** Format: misskey:id */
fileId?: string; fileId: string;
url?: string; } | {
url: string;
}; };
}; };
}; };
@ -8093,10 +8094,12 @@ export type operations = {
admin___emoji___update: { admin___emoji___update: {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': ({
/** Format: misskey:id */ /** Format: misskey:id */
id?: string; id: string;
name?: string; } | {
name: string;
}) & ({
/** Format: misskey:id */ /** Format: misskey:id */
fileId?: string; fileId?: string;
/** @description Use `null` to reset the category. */ /** @description Use `null` to reset the category. */
@ -8106,7 +8109,7 @@ export type operations = {
isSensitive?: boolean; isSensitive?: boolean;
localOnly?: boolean; localOnly?: boolean;
roleIdsThatCanBeUsedThisEmojiAsReaction?: string[]; roleIdsThatCanBeUsedThisEmojiAsReaction?: string[];
}; });
}; };
}; };
responses: { responses: {
@ -8806,6 +8809,7 @@ export type operations = {
uri: string; uri: string;
version: string; version: string;
urlPreviewEnabled: boolean; urlPreviewEnabled: boolean;
urlPreviewAllowRedirect: boolean;
urlPreviewTimeout: number; urlPreviewTimeout: number;
urlPreviewMaximumContentLength: number; urlPreviewMaximumContentLength: number;
urlPreviewRequireContentLength: boolean; urlPreviewRequireContentLength: boolean;
@ -11533,6 +11537,7 @@ export type operations = {
/** @description [Deprecated] Use "urlPreviewSummaryProxyUrl" instead. */ /** @description [Deprecated] Use "urlPreviewSummaryProxyUrl" instead. */
summalyProxy?: string | null; summalyProxy?: string | null;
urlPreviewEnabled?: boolean; urlPreviewEnabled?: boolean;
urlPreviewAllowRedirect?: boolean;
urlPreviewTimeout?: number; urlPreviewTimeout?: number;
urlPreviewMaximumContentLength?: number; urlPreviewMaximumContentLength?: number;
urlPreviewRequireContentLength?: boolean; urlPreviewRequireContentLength?: boolean;
@ -16996,8 +17001,9 @@ export type operations = {
content: { content: {
'application/json': { 'application/json': {
/** Format: misskey:id */ /** Format: misskey:id */
fileId?: string; fileId: string;
url?: string; } | {
url: string;
}; };
}; };
}; };
@ -23096,9 +23102,10 @@ export type operations = {
content: { content: {
'application/json': { 'application/json': {
/** Format: misskey:id */ /** Format: misskey:id */
tokenId?: string; tokenId: string;
token?: string | null; } | ({
}; token: string | null;
});
}; };
}; };
responses: { responses: {
@ -25784,7 +25791,12 @@ export type operations = {
'notes___search-by-tag': { 'notes___search-by-tag': {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': ({
tag: string;
} | {
/** @description The outer arrays are chained with OR, the inner arrays are chained with AND. */
query: string[][];
}) & ({
/** @default null */ /** @default null */
reply?: boolean | null; reply?: boolean | null;
/** @default null */ /** @default null */
@ -25802,10 +25814,7 @@ export type operations = {
untilId?: string; untilId?: string;
/** @default 10 */ /** @default 10 */
limit?: number; limit?: number;
tag?: string; });
/** @description The outer arrays are chained with OR, the inner arrays are chained with AND. */
query?: string[][];
};
}; };
}; };
responses: { responses: {
@ -26890,9 +26899,10 @@ export type operations = {
content: { content: {
'application/json': { 'application/json': {
/** Format: misskey:id */ /** Format: misskey:id */
pageId?: string; pageId: string;
name?: string; } | {
username?: string; name: string;
username: string;
}; };
}; };
}; };
@ -28979,18 +28989,20 @@ export type operations = {
users___followers: { users___followers: {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': ({
/** Format: misskey:id */
userId: string;
} | ({
username: string;
/** @description The local host is represented with `null`. */
host: string | null;
})) & {
/** Format: misskey:id */ /** Format: misskey:id */
sinceId?: string; sinceId?: string;
/** Format: misskey:id */ /** Format: misskey:id */
untilId?: string; untilId?: string;
/** @default 10 */ /** @default 10 */
limit?: number; limit?: number;
/** Format: misskey:id */
userId?: string;
username?: string;
/** @description The local host is represented with `null`. */
host?: string | null;
}; };
}; };
}; };
@ -29042,20 +29054,22 @@ export type operations = {
users___following: { users___following: {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': ({
/** Format: misskey:id */
userId: string;
} | ({
username: string;
/** @description The local host is represented with `null`. */
host: string | null;
})) & ({
/** Format: misskey:id */ /** Format: misskey:id */
sinceId?: string; sinceId?: string;
/** Format: misskey:id */ /** Format: misskey:id */
untilId?: string; untilId?: string;
/** @default 10 */ /** @default 10 */
limit?: number; limit?: number;
/** Format: misskey:id */
userId?: string;
username?: string;
/** @description The local host is represented with `null`. */
host?: string | null;
birthday?: string | null; birthday?: string | null;
}; });
}; };
}; };
responses: { responses: {
@ -30337,13 +30351,15 @@ export type operations = {
'users___search-by-username-and-host': { 'users___search-by-username-and-host': {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': (({
username: string | null;
}) | ({
host: string | null;
})) & {
/** @default 10 */ /** @default 10 */
limit?: number; limit?: number;
/** @default true */ /** @default true */
detail?: boolean; detail?: boolean;
username?: string | null;
host?: string | null;
}; };
}; };
}; };
@ -30395,14 +30411,17 @@ export type operations = {
users___show: { users___show: {
requestBody: { requestBody: {
content: { content: {
'application/json': { 'application/json': ({
/** Format: misskey:id */ /** Format: misskey:id */
userId?: string; userId: string;
userIds?: string[]; } | {
username?: string; userIds: string[];
} | {
username: string;
}) & ({
/** @description The local host is represented with `null`. */ /** @description The local host is represented with `null`. */
host?: string | null; host?: string | null;
}; });
}; };
}; };
responses: { responses: {

View File

@ -88,11 +88,11 @@ importers:
packages/backend: packages/backend:
dependencies: dependencies:
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
specifier: 3.815.0 specifier: 3.817.0
version: 3.815.0 version: 3.817.0
'@aws-sdk/lib-storage': '@aws-sdk/lib-storage':
specifier: 3.815.0 specifier: 3.817.0
version: 3.815.0(@aws-sdk/client-s3@3.815.0) version: 3.817.0(@aws-sdk/client-s3@3.817.0)
'@discordapp/twemoji': '@discordapp/twemoji':
specifier: 15.1.0 specifier: 15.1.0
version: 15.1.0 version: 15.1.0
@ -130,14 +130,14 @@ importers:
specifier: 0.1.70 specifier: 0.1.70
version: 0.1.70 version: 0.1.70
'@nestjs/common': '@nestjs/common':
specifier: 11.1.1 specifier: 11.1.2
version: 11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2) version: 11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': '@nestjs/core':
specifier: 11.1.1 specifier: 11.1.2
version: 11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) version: 11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.18)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/testing': '@nestjs/testing':
specifier: 11.1.1 specifier: 11.1.2
version: 11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1)(@nestjs/platform-express@10.4.17) version: 11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)(@nestjs/platform-express@10.4.18)
'@peertube/http-signature': '@peertube/http-signature':
specifier: 1.7.0 specifier: 1.7.0
version: 1.7.0 version: 1.7.0
@ -364,8 +364,8 @@ importers:
specifier: 3.4.1 specifier: 3.4.1
version: 3.4.1 version: 3.4.1
re2: re2:
specifier: 1.21.5 specifier: 1.22.1
version: 1.21.5 version: 1.22.1
redis-info: redis-info:
specifier: 3.1.0 specifier: 3.1.0
version: 3.1.0 version: 3.1.0
@ -406,8 +406,8 @@ importers:
specifier: 2.1.0 specifier: 2.1.0
version: 2.1.0 version: 2.1.0
systeminformation: systeminformation:
specifier: 5.26.1 specifier: 5.27.1
version: 5.26.1 version: 5.27.1
tinycolor2: tinycolor2:
specifier: 1.6.0 specifier: 1.6.0
version: 1.6.0 version: 1.6.0
@ -446,8 +446,8 @@ importers:
specifier: 29.7.0 specifier: 29.7.0
version: 29.7.0 version: 29.7.0
'@nestjs/platform-express': '@nestjs/platform-express':
specifier: 10.4.17 specifier: 10.4.18
version: 10.4.17(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1) version: 10.4.18(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)
'@sentry/vue': '@sentry/vue':
specifier: 9.22.0 specifier: 9.22.0
version: 9.22.0(vue@3.5.14(typescript@5.8.3)) version: 9.22.0(vue@3.5.14(typescript@5.8.3))
@ -1570,51 +1570,51 @@ packages:
'@aws-crypto/util@5.2.0': '@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
'@aws-sdk/client-s3@3.815.0': '@aws-sdk/client-s3@3.817.0':
resolution: {integrity: sha512-tpJyXuGYIPHIu8G53jXQw3mN5ZK6LdL+tcEF3kRJuQ377Vbo+BSfqaizt9Qb3JuOGcNwCp83jd2LlmcXypN5fg==} resolution: {integrity: sha512-nZyjhlLMEXDs0ofWbpikI8tKoeKuuSgYcIb6eEZJk90Nt5HkkXn6nkWOs/kp2FdhpoGJyTILOVsDgdm7eutnLA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/client-sso@3.812.0': '@aws-sdk/client-sso@3.817.0':
resolution: {integrity: sha512-O//smQRj1+RXELB7xX54s5pZB0V69KHXpUZmz8V+8GAYO1FKTHfbpUgK+zyMNb+lFZxG9B69yl8pWPZ/K8bvxA==} resolution: {integrity: sha512-fCh5rUHmWmWDvw70NNoWpE5+BRdtNi45kDnIoeoszqVg7UKF79SlG+qYooUT52HKCgDNHqgbWaXxMOSqd2I/OQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/core@3.812.0': '@aws-sdk/core@3.816.0':
resolution: {integrity: sha512-myWA9oHMBVDObKrxG+puAkIGs8igcWInQ1PWCRTS/zN4BkhUMFjjh/JPV/4Vzvtvj5E36iujq2WtlrDLl1PpOw==} resolution: {integrity: sha512-Lx50wjtyarzKpMFV6V+gjbSZDgsA/71iyifbClGUSiNPoIQ4OCV0KVOmAAj7mQRVvGJqUMWKVM+WzK79CjbjWA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-env@3.812.0': '@aws-sdk/credential-provider-env@3.816.0':
resolution: {integrity: sha512-Ge7IEu06ANurGBZx39q9CNN/ncqb1K8lpKZCY969uNWO0/7YPhnplrRJGMZYIS35nD2mBm3ortEKjY/wMZZd5g==} resolution: {integrity: sha512-wUJZwRLe+SxPxRV9AENYBLrJZRrNIo+fva7ZzejsC83iz7hdfq6Rv6B/aHEdPwG/nQC4+q7UUvcRPlomyrpsBA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-http@3.812.0': '@aws-sdk/credential-provider-http@3.816.0':
resolution: {integrity: sha512-Vux2U42vPGXeE407Lp6v3yVA65J7hBO9rB67LXshyGVi7VZLAYWc4mrZxNJNqabEkjcDEmMQQakLPT6zc5SvFw==} resolution: {integrity: sha512-gcWGzMQ7yRIF+ljTkR8Vzp7727UY6cmeaPrFQrvcFB8PhOqWpf7g0JsgOf5BSaP8CkkSQcTQHc0C5ZYAzUFwPg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-ini@3.812.0': '@aws-sdk/credential-provider-ini@3.817.0':
resolution: {integrity: sha512-oltqGvQ488xtPY5wrNjbD+qQYYkuCjn30IDE1qKMxJ58EM6UVTQl3XV44Xq07xfF5gKwVJQkfIyOkRAguOVybg==} resolution: {integrity: sha512-kyEwbQyuXE+phWVzloMdkFv6qM6NOon+asMXY5W0fhDKwBz9zQLObDRWBrvQX9lmqq8BbDL1sCfZjOh82Y+RFw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-node@3.812.0': '@aws-sdk/credential-provider-node@3.817.0':
resolution: {integrity: sha512-SnvSWBP6cr9nqx784eETnL2Zl7ZnMB/oJgFVEG1aejAGbT1H9gTpMwuUsBXk4u/mEYe3f1lh1Wqo+HwDgNkfrg==} resolution: {integrity: sha512-b5mz7av0Lhavs1Bz3Zb+jrs0Pki93+8XNctnVO0drBW98x1fM4AR38cWvGbM/w9F9Q0/WEH3TinkmrMPrP4T/w==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-process@3.812.0': '@aws-sdk/credential-provider-process@3.816.0':
resolution: {integrity: sha512-YI8bb153XeEOb59F9KtTZEwDAc14s2YHZz58+OFiJ2udnKsPV87mNiFhJPW6ba9nmOLXVat5XDcwtVT1b664wg==} resolution: {integrity: sha512-9Tm+AxMoV2Izvl5b9tyMQRbBwaex8JP06HN7ZeCXgC5sAsSN+o8dsThnEhf8jKN+uBpT6CLWKN1TXuUMrAmW1A==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-sso@3.812.0': '@aws-sdk/credential-provider-sso@3.817.0':
resolution: {integrity: sha512-ODsPcNhgiO6GOa82TVNskM97mml9rioe9Cbhemz48lkfDQPv1u06NaCR0o3FsvprX1sEhMvJTR3sE1fyEOzvJQ==} resolution: {integrity: sha512-gFUAW3VmGvdnueK1bh6TOcRX+j99Xm0men1+gz3cA4RE+rZGNy1Qjj8YHlv0hPwI9OnTPZquvPzA5fkviGREWg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-web-identity@3.812.0': '@aws-sdk/credential-provider-web-identity@3.817.0':
resolution: {integrity: sha512-E9Bmiujvm/Hp9DM/Vc1S+D0pQbx8/x4dR/zyAEZU9EoRq0duQOQ1reWYWbebYmL1OklcVpTfKV0a/VCwuAtGSg==} resolution: {integrity: sha512-A2kgkS9g6NY0OMT2f2EdXHpL17Ym81NhbGnQ8bRXPqESIi7TFypFD2U6osB2VnsFv+MhwM+Ke4PKXSmLun22/A==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/lib-storage@3.815.0': '@aws-sdk/lib-storage@3.817.0':
resolution: {integrity: sha512-67FgW0T/1UupfKYzASW/5JEvM3jq6aIEwHaJl56K4nBhwVBxr1lu/xVSZ80fA6lgysKHh5GAtQhueQCKwj53wA==} resolution: {integrity: sha512-2zOO8+2EmiS049PjLSNdqmmZMQj7fzE1hZJ70A94vO+KNaVhVZYuMOOiOmwMw6ePkTCcFwK40vZIIXwEQQ1v1g==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
peerDependencies: peerDependencies:
'@aws-sdk/client-s3': ^3.815.0 '@aws-sdk/client-s3': ^3.817.0
'@aws-sdk/middleware-bucket-endpoint@3.808.0': '@aws-sdk/middleware-bucket-endpoint@3.808.0':
resolution: {integrity: sha512-wEPlNcs8dir9lXbuviEGtSzYSxG/NRKQrJk5ybOc7OpPGHovsN+QhDOdY3lcjOFdwMTiMIG9foUkPz3zBpLB1A==} resolution: {integrity: sha512-wEPlNcs8dir9lXbuviEGtSzYSxG/NRKQrJk5ybOc7OpPGHovsN+QhDOdY3lcjOFdwMTiMIG9foUkPz3zBpLB1A==}
@ -1624,8 +1624,8 @@ packages:
resolution: {integrity: sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==} resolution: {integrity: sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-flexible-checksums@3.815.0': '@aws-sdk/middleware-flexible-checksums@3.816.0':
resolution: {integrity: sha512-cv/BO7saBbHTrLMUJiClZHM/GB4xDBbJmZ70f9HwcNBP59tBB8TgF/vSyi8SdFM82TvRP+Zzi1AZ8hXcwElaCg==} resolution: {integrity: sha512-kftcwDxB/VoCBsUiRgkm5CIuKbTfCN1WLPbis9LRwX3kQhKgGVxG2gG78SHk4TBB0qviWVAd/t+i/KaUgwiAcA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-host-header@3.804.0': '@aws-sdk/middleware-host-header@3.804.0':
@ -1644,32 +1644,32 @@ packages:
resolution: {integrity: sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==} resolution: {integrity: sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-sdk-s3@3.812.0': '@aws-sdk/middleware-sdk-s3@3.816.0':
resolution: {integrity: sha512-e8AqRRIaTsunL1hqtO1hksa9oTYdsIbfezHUyVpPGugUIB1lMqPt/DlBsanI85OzUD711UfNSEcZ1mqAxpDOoA==} resolution: {integrity: sha512-jJ+EAXM7gnOwiCM6rrl4AUNY5urmtIsX7roTkxtb4DevJxcS+wFYRRg3/j33fQbuxQZrvk21HqxyZYx5UH70PA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-ssec@3.804.0': '@aws-sdk/middleware-ssec@3.804.0':
resolution: {integrity: sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==} resolution: {integrity: sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-user-agent@3.812.0': '@aws-sdk/middleware-user-agent@3.816.0':
resolution: {integrity: sha512-r+HFwtSvnAs6Fydp4mijylrTX0og9p/xfxOcKsqhMuk3HpZAIcf9sSjRQI6MBusYklg7pnM4sGEnPAZIrdRotA==} resolution: {integrity: sha512-bHRSlWZ0xDsFR8E2FwDb//0Ff6wMkVx4O+UKsfyNlAbtqCiiHRt5ANNfKPafr95cN2CCxLxiPvFTFVblQM5TsQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/nested-clients@3.812.0': '@aws-sdk/nested-clients@3.817.0':
resolution: {integrity: sha512-FS/fImbEpJU3cXtBGR9fyVd+CP51eNKlvTMi3f4/6lSk3RmHjudNC9yEF/og3jtpT3O+7vsNOUW9mHco5IjdQQ==} resolution: {integrity: sha512-vQ2E06A48STJFssueJQgxYD8lh1iGJoLJnHdshRDWOQb8gy1wVQR+a7MkPGhGR6lGoS0SCnF/Qp6CZhnwLsqsQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/region-config-resolver@3.808.0': '@aws-sdk/region-config-resolver@3.808.0':
resolution: {integrity: sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A==} resolution: {integrity: sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/signature-v4-multi-region@3.812.0': '@aws-sdk/signature-v4-multi-region@3.816.0':
resolution: {integrity: sha512-JTpk3ZHf7TXYbicKfOKi+VrsBTqcAszg9QR9fQmT9aCxPp39gsF3WsXq7NjepwZ5So11ixGIsPE/jtMym399QQ==} resolution: {integrity: sha512-idcr9NW86sSIXASSej3423Selu6fxlhhJJtMgpAqoCH/HJh1eQrONJwNKuI9huiruPE8+02pwxuePvLW46X2mw==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/token-providers@3.812.0': '@aws-sdk/token-providers@3.817.0':
resolution: {integrity: sha512-dbVBaKxrxE708ub5uH3w+cmKIeRQas+2Xf6rpckhohYY+IiflGOdK6aLrp3T6dOQgr/FJ37iQtcYNonAG+yVBQ==} resolution: {integrity: sha512-CYN4/UO0VaqyHf46ogZzNrVX7jI3/CfiuktwKlwtpKA6hjf2+ivfgHSKzPpgPBcSEfiibA/26EeLuMnB6cpSrQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@aws-sdk/types@3.804.0': '@aws-sdk/types@3.804.0':
@ -1691,8 +1691,8 @@ packages:
'@aws-sdk/util-user-agent-browser@3.804.0': '@aws-sdk/util-user-agent-browser@3.804.0':
resolution: {integrity: sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==} resolution: {integrity: sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==}
'@aws-sdk/util-user-agent-node@3.812.0': '@aws-sdk/util-user-agent-node@3.816.0':
resolution: {integrity: sha512-8pt+OkHhS2U0LDwnzwRnFxyKn8sjSe752OIZQCNv263odud8jQu9pYO2pKqb2kRBk9h9szynjZBDLXfnvSQ7Bg==} resolution: {integrity: sha512-Q6dxmuj4hL7pudhrneWEQ7yVHIQRBFr0wqKLF1opwOi1cIePuoEbPyJ2jkel6PDEv1YMfvsAKaRshp6eNA8VHg==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
peerDependencies: peerDependencies:
aws-crt: '>=1.0.0' aws-crt: '>=1.0.0'
@ -2818,8 +2818,8 @@ packages:
resolution: {integrity: sha512-nD6NGa4JbNYSZYsTnLGrqe9Kn/lCkA4ybXt8sx5ojDqZjr2i0TWAHxx/vhgfjX+i3hCdKWufxYwi7CfXqtITSA==} resolution: {integrity: sha512-nD6NGa4JbNYSZYsTnLGrqe9Kn/lCkA4ybXt8sx5ojDqZjr2i0TWAHxx/vhgfjX+i3hCdKWufxYwi7CfXqtITSA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
'@nestjs/common@11.1.1': '@nestjs/common@11.1.2':
resolution: {integrity: sha512-crzp+1qeZ5EGL0nFTPy9NrVMAaUWewV5AwtQyv6SQ9yQPXwRl9W9hm1pt0nAtUu5QbYMbSuo7lYcF81EjM+nCA==} resolution: {integrity: sha512-cHh4OPH44PjaHM93D1jgE1HO/B7XTZVRDxy/cPuGgyMEA4p2zXO+qqcOgTMC5FYcp7dX9jLeCjXAU0ToFAnODw==}
peerDependencies: peerDependencies:
class-transformer: '>=0.4.1' class-transformer: '>=0.4.1'
class-validator: '>=0.13.2' class-validator: '>=0.13.2'
@ -2831,8 +2831,8 @@ packages:
class-validator: class-validator:
optional: true optional: true
'@nestjs/core@11.1.1': '@nestjs/core@11.1.2':
resolution: {integrity: sha512-UFoUAgLKFT+RwHTANJdr0dF7p0qS9QjkaUPjg8aafnjM/qxxxrUVDB49nVvyMlk+Hr1+vvcNaOHbWWQBxoZcHA==} resolution: {integrity: sha512-QRuyxwu0BjNfmmmunsw1ylX7RSyfDQHt+xD+tKncdtgiMOOzAu+LA1gB4WoZnw4frQkk+qZbhEbM61cIjOxD3w==}
engines: {node: '>= 20'} engines: {node: '>= 20'}
peerDependencies: peerDependencies:
'@nestjs/common': ^11.0.0 '@nestjs/common': ^11.0.0
@ -2849,14 +2849,14 @@ packages:
'@nestjs/websockets': '@nestjs/websockets':
optional: true optional: true
'@nestjs/platform-express@10.4.17': '@nestjs/platform-express@10.4.18':
resolution: {integrity: sha512-ovn4Wxney3QGBrqNPv0QLcCuH5QoAi6pb/GNWAz6B/NmBjZbs9/zl4a2beGDA2SaYre9w43YbfmHTm17PneP9w==} resolution: {integrity: sha512-v+W+Pu5NOVK/bSG5A5mOnXyoVwN5mJUe4o0j0UJ9Ig9JMmjVxg+Zw2ydTfpOQ+R82lRYWJUjjv3dvqKaFW2z7w==}
peerDependencies: peerDependencies:
'@nestjs/common': ^10.0.0 '@nestjs/common': ^10.0.0
'@nestjs/core': ^10.0.0 '@nestjs/core': ^10.0.0
'@nestjs/testing@11.1.1': '@nestjs/testing@11.1.2':
resolution: {integrity: sha512-stzm8YrLDGAijHYQw+8Z9dD6lGdvahL0hIjGVZ/0KBxLZht0/rvRjgV31UK+DUqXaF7yhJTw9ryrPaITxI1J6A==} resolution: {integrity: sha512-BQxVKUVW6gzEbbHAvmg5RgcP3s++pRgTCmsgaDF/DtcLRUeKi8SjAdqzLm14xbkMeibxOf3fNqM2iwqUKj8ffw==}
peerDependencies: peerDependencies:
'@nestjs/common': ^11.0.0 '@nestjs/common': ^11.0.0
'@nestjs/core': ^11.0.0 '@nestjs/core': ^11.0.0
@ -6448,9 +6448,9 @@ packages:
resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
file-type@20.5.0: file-type@21.0.0:
resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==} resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==}
engines: {node: '>=18'} engines: {node: '>=20'}
filename-reserved-regex@3.0.0: filename-reserved-regex@3.0.0:
resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
@ -6989,8 +6989,8 @@ packages:
inspect-with-kind@1.0.5: inspect-with-kind@1.0.5:
resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==}
install-artifact-from-github@1.3.5: install-artifact-from-github@1.4.0:
resolution: {integrity: sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg==} resolution: {integrity: sha512-+y6WywKZREw5rq7U2jvr2nmZpT7cbWbQQ0N/qfcseYnzHFz2cZz1Et52oY+XttYuYeTkI8Y+R2JNWj68MpQFSg==}
hasBin: true hasBin: true
internal-slot@1.0.7: internal-slot@1.0.7:
@ -8072,10 +8072,9 @@ packages:
muggle-string@0.4.1: muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
multer@1.4.4-lts.1: multer@2.0.0:
resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==} resolution: {integrity: sha512-bS8rPZurbAuHGAnApbM9d4h1wSoYqrOqkE+6a64KLMK9yWU7gJXBDDVklKQ3TPi9DRb85cRs6yXaC0+cjxRtRg==}
engines: {node: '>= 6.0.0'} engines: {node: '>= 10.16.0'}
deprecated: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.
mute-stream@2.0.0: mute-stream@2.0.0:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
@ -9094,8 +9093,8 @@ packages:
resolution: {integrity: sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==} resolution: {integrity: sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==}
engines: {node: '>=12'} engines: {node: '>=12'}
re2@1.21.5: re2@1.22.1:
resolution: {integrity: sha512-ud7gX1bO6K4+l2YVUxZjOPCiyCBZvmi7XUnGArSk3rGIvsZW35jX3pjGs8zQiTumOpgbxHCZI1ivB1VO7i4MFw==} resolution: {integrity: sha512-E4J0EtgyNLdIr0wTg0dQPefuiqNY29KaLacytiUAYYRzxCG+zOkWoUygt1rI+TA1LrhN49/njrfSO1DHtVC5Vw==}
react-docgen-typescript@2.2.2: react-docgen-typescript@2.2.2:
resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
@ -9898,8 +9897,8 @@ packages:
symbol-tree@3.2.4: symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
systeminformation@5.26.1: systeminformation@5.27.1:
resolution: {integrity: sha512-Nd503zsVvWKBREk5ekpCqONR6EVeualuZNm1ZS2BBCX/f/AUsOmsF32UVHUj8CUghWQle+6MdelIxRENGDvGhA==} resolution: {integrity: sha512-FgkVpT6GgATtNvADgtEzDxI/SVaBisfnQ4fmgQZhCJ4335noTgt9q6O81ioHwzs9HgnJaaFSdHSEMIkneZ55iA==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true hasBin: true
@ -10527,6 +10526,9 @@ packages:
vue-component-type-helpers@2.2.10: vue-component-type-helpers@2.2.10:
resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==} resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==}
vue-component-type-helpers@3.0.0-alpha.8:
resolution: {integrity: sha512-90tDQ0Si5EOuBj1IWGg4o0prHt3H5xysZS/9z/m5TTC8xTKrDYAUQvbWiNVa9VXg/ED3ah6yDuQirXW+O6bTdA==}
vue-demi@0.14.7: vue-demi@0.14.7:
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -10919,29 +10921,29 @@ snapshots:
'@smithy/util-utf8': 2.0.0 '@smithy/util-utf8': 2.0.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/client-s3@3.815.0': '@aws-sdk/client-s3@3.817.0':
dependencies: dependencies:
'@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/credential-provider-node': 3.812.0 '@aws-sdk/credential-provider-node': 3.817.0
'@aws-sdk/middleware-bucket-endpoint': 3.808.0 '@aws-sdk/middleware-bucket-endpoint': 3.808.0
'@aws-sdk/middleware-expect-continue': 3.804.0 '@aws-sdk/middleware-expect-continue': 3.804.0
'@aws-sdk/middleware-flexible-checksums': 3.815.0 '@aws-sdk/middleware-flexible-checksums': 3.816.0
'@aws-sdk/middleware-host-header': 3.804.0 '@aws-sdk/middleware-host-header': 3.804.0
'@aws-sdk/middleware-location-constraint': 3.804.0 '@aws-sdk/middleware-location-constraint': 3.804.0
'@aws-sdk/middleware-logger': 3.804.0 '@aws-sdk/middleware-logger': 3.804.0
'@aws-sdk/middleware-recursion-detection': 3.804.0 '@aws-sdk/middleware-recursion-detection': 3.804.0
'@aws-sdk/middleware-sdk-s3': 3.812.0 '@aws-sdk/middleware-sdk-s3': 3.816.0
'@aws-sdk/middleware-ssec': 3.804.0 '@aws-sdk/middleware-ssec': 3.804.0
'@aws-sdk/middleware-user-agent': 3.812.0 '@aws-sdk/middleware-user-agent': 3.816.0
'@aws-sdk/region-config-resolver': 3.808.0 '@aws-sdk/region-config-resolver': 3.808.0
'@aws-sdk/signature-v4-multi-region': 3.812.0 '@aws-sdk/signature-v4-multi-region': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@aws-sdk/util-endpoints': 3.808.0 '@aws-sdk/util-endpoints': 3.808.0
'@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-browser': 3.804.0
'@aws-sdk/util-user-agent-node': 3.812.0 '@aws-sdk/util-user-agent-node': 3.816.0
'@aws-sdk/xml-builder': 3.804.0 '@aws-sdk/xml-builder': 3.804.0
'@smithy/config-resolver': 4.1.3 '@smithy/config-resolver': 4.1.3
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
@ -10980,20 +10982,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-sso@3.812.0': '@aws-sdk/client-sso@3.817.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/middleware-host-header': 3.804.0 '@aws-sdk/middleware-host-header': 3.804.0
'@aws-sdk/middleware-logger': 3.804.0 '@aws-sdk/middleware-logger': 3.804.0
'@aws-sdk/middleware-recursion-detection': 3.804.0 '@aws-sdk/middleware-recursion-detection': 3.804.0
'@aws-sdk/middleware-user-agent': 3.812.0 '@aws-sdk/middleware-user-agent': 3.816.0
'@aws-sdk/region-config-resolver': 3.808.0 '@aws-sdk/region-config-resolver': 3.808.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@aws-sdk/util-endpoints': 3.808.0 '@aws-sdk/util-endpoints': 3.808.0
'@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-browser': 3.804.0
'@aws-sdk/util-user-agent-node': 3.812.0 '@aws-sdk/util-user-agent-node': 3.816.0
'@smithy/config-resolver': 4.1.3 '@smithy/config-resolver': 4.1.3
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
'@smithy/fetch-http-handler': 5.0.3 '@smithy/fetch-http-handler': 5.0.3
@ -11023,7 +11025,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/core@3.812.0': '@aws-sdk/core@3.816.0':
dependencies: dependencies:
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
@ -11037,17 +11039,17 @@ snapshots:
fast-xml-parser: 4.4.1 fast-xml-parser: 4.4.1
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-env@3.812.0': '@aws-sdk/credential-provider-env@3.816.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-http@3.812.0': '@aws-sdk/credential-provider-http@3.816.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/fetch-http-handler': 5.0.3 '@smithy/fetch-http-handler': 5.0.3
'@smithy/node-http-handler': 4.0.5 '@smithy/node-http-handler': 4.0.5
@ -11058,15 +11060,15 @@ snapshots:
'@smithy/util-stream': 4.2.1 '@smithy/util-stream': 4.2.1
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-ini@3.812.0': '@aws-sdk/credential-provider-ini@3.817.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/credential-provider-env': 3.812.0 '@aws-sdk/credential-provider-env': 3.816.0
'@aws-sdk/credential-provider-http': 3.812.0 '@aws-sdk/credential-provider-http': 3.816.0
'@aws-sdk/credential-provider-process': 3.812.0 '@aws-sdk/credential-provider-process': 3.816.0
'@aws-sdk/credential-provider-sso': 3.812.0 '@aws-sdk/credential-provider-sso': 3.817.0
'@aws-sdk/credential-provider-web-identity': 3.812.0 '@aws-sdk/credential-provider-web-identity': 3.817.0
'@aws-sdk/nested-clients': 3.812.0 '@aws-sdk/nested-clients': 3.817.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/credential-provider-imds': 4.0.5 '@smithy/credential-provider-imds': 4.0.5
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
@ -11076,14 +11078,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-node@3.812.0': '@aws-sdk/credential-provider-node@3.817.0':
dependencies: dependencies:
'@aws-sdk/credential-provider-env': 3.812.0 '@aws-sdk/credential-provider-env': 3.816.0
'@aws-sdk/credential-provider-http': 3.812.0 '@aws-sdk/credential-provider-http': 3.816.0
'@aws-sdk/credential-provider-ini': 3.812.0 '@aws-sdk/credential-provider-ini': 3.817.0
'@aws-sdk/credential-provider-process': 3.812.0 '@aws-sdk/credential-provider-process': 3.816.0
'@aws-sdk/credential-provider-sso': 3.812.0 '@aws-sdk/credential-provider-sso': 3.817.0
'@aws-sdk/credential-provider-web-identity': 3.812.0 '@aws-sdk/credential-provider-web-identity': 3.817.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/credential-provider-imds': 4.0.5 '@smithy/credential-provider-imds': 4.0.5
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
@ -11093,20 +11095,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-process@3.812.0': '@aws-sdk/credential-provider-process@3.816.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
'@smithy/shared-ini-file-loader': 4.0.3 '@smithy/shared-ini-file-loader': 4.0.3
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/credential-provider-sso@3.812.0': '@aws-sdk/credential-provider-sso@3.817.0':
dependencies: dependencies:
'@aws-sdk/client-sso': 3.812.0 '@aws-sdk/client-sso': 3.817.0
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/token-providers': 3.812.0 '@aws-sdk/token-providers': 3.817.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
'@smithy/shared-ini-file-loader': 4.0.3 '@smithy/shared-ini-file-loader': 4.0.3
@ -11115,10 +11117,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/credential-provider-web-identity@3.812.0': '@aws-sdk/credential-provider-web-identity@3.817.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/nested-clients': 3.812.0 '@aws-sdk/nested-clients': 3.817.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
@ -11126,9 +11128,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/lib-storage@3.815.0(@aws-sdk/client-s3@3.815.0)': '@aws-sdk/lib-storage@3.817.0(@aws-sdk/client-s3@3.817.0)':
dependencies: dependencies:
'@aws-sdk/client-s3': 3.815.0 '@aws-sdk/client-s3': 3.817.0
'@smithy/abort-controller': 4.0.3 '@smithy/abort-controller': 4.0.3
'@smithy/middleware-endpoint': 4.1.7 '@smithy/middleware-endpoint': 4.1.7
'@smithy/smithy-client': 4.3.0 '@smithy/smithy-client': 4.3.0
@ -11154,12 +11156,12 @@ snapshots:
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-flexible-checksums@3.815.0': '@aws-sdk/middleware-flexible-checksums@3.816.0':
dependencies: dependencies:
'@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0 '@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0 '@aws-crypto/util': 5.2.0
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/is-array-buffer': 4.0.0 '@smithy/is-array-buffer': 4.0.0
'@smithy/node-config-provider': 4.1.2 '@smithy/node-config-provider': 4.1.2
@ -11196,9 +11198,9 @@ snapshots:
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-sdk-s3@3.812.0': '@aws-sdk/middleware-sdk-s3@3.816.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@aws-sdk/util-arn-parser': 3.804.0 '@aws-sdk/util-arn-parser': 3.804.0
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
@ -11219,9 +11221,9 @@ snapshots:
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/middleware-user-agent@3.812.0': '@aws-sdk/middleware-user-agent@3.816.0':
dependencies: dependencies:
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@aws-sdk/util-endpoints': 3.808.0 '@aws-sdk/util-endpoints': 3.808.0
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
@ -11229,20 +11231,20 @@ snapshots:
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/nested-clients@3.812.0': '@aws-sdk/nested-clients@3.817.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/core': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/middleware-host-header': 3.804.0 '@aws-sdk/middleware-host-header': 3.804.0
'@aws-sdk/middleware-logger': 3.804.0 '@aws-sdk/middleware-logger': 3.804.0
'@aws-sdk/middleware-recursion-detection': 3.804.0 '@aws-sdk/middleware-recursion-detection': 3.804.0
'@aws-sdk/middleware-user-agent': 3.812.0 '@aws-sdk/middleware-user-agent': 3.816.0
'@aws-sdk/region-config-resolver': 3.808.0 '@aws-sdk/region-config-resolver': 3.808.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@aws-sdk/util-endpoints': 3.808.0 '@aws-sdk/util-endpoints': 3.808.0
'@aws-sdk/util-user-agent-browser': 3.804.0 '@aws-sdk/util-user-agent-browser': 3.804.0
'@aws-sdk/util-user-agent-node': 3.812.0 '@aws-sdk/util-user-agent-node': 3.816.0
'@smithy/config-resolver': 4.1.3 '@smithy/config-resolver': 4.1.3
'@smithy/core': 3.4.0 '@smithy/core': 3.4.0
'@smithy/fetch-http-handler': 5.0.3 '@smithy/fetch-http-handler': 5.0.3
@ -11281,18 +11283,19 @@ snapshots:
'@smithy/util-middleware': 4.0.3 '@smithy/util-middleware': 4.0.3
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/signature-v4-multi-region@3.812.0': '@aws-sdk/signature-v4-multi-region@3.816.0':
dependencies: dependencies:
'@aws-sdk/middleware-sdk-s3': 3.812.0 '@aws-sdk/middleware-sdk-s3': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/protocol-http': 5.1.1 '@smithy/protocol-http': 5.1.1
'@smithy/signature-v4': 5.1.0 '@smithy/signature-v4': 5.1.0
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/token-providers@3.812.0': '@aws-sdk/token-providers@3.817.0':
dependencies: dependencies:
'@aws-sdk/nested-clients': 3.812.0 '@aws-sdk/core': 3.816.0
'@aws-sdk/nested-clients': 3.817.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/property-provider': 4.0.3 '@smithy/property-provider': 4.0.3
'@smithy/shared-ini-file-loader': 4.0.3 '@smithy/shared-ini-file-loader': 4.0.3
@ -11328,9 +11331,9 @@ snapshots:
bowser: 2.11.0 bowser: 2.11.0
tslib: 2.8.1 tslib: 2.8.1
'@aws-sdk/util-user-agent-node@3.812.0': '@aws-sdk/util-user-agent-node@3.816.0':
dependencies: dependencies:
'@aws-sdk/middleware-user-agent': 3.812.0 '@aws-sdk/middleware-user-agent': 3.816.0
'@aws-sdk/types': 3.804.0 '@aws-sdk/types': 3.804.0
'@smithy/node-config-provider': 4.1.2 '@smithy/node-config-provider': 4.1.2
'@smithy/types': 4.3.0 '@smithy/types': 4.3.0
@ -11361,7 +11364,7 @@ snapshots:
'@babel/traverse': 7.24.7 '@babel/traverse': 7.24.7
'@babel/types': 7.25.6 '@babel/types': 7.25.6
convert-source-map: 2.0.0 convert-source-map: 2.0.0
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
json5: 2.2.3 json5: 2.2.3
semver: 6.3.1 semver: 6.3.1
@ -11547,7 +11550,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7
'@babel/parser': 7.25.6 '@babel/parser': 7.25.6
'@babel/types': 7.25.6 '@babel/types': 7.25.6
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -11810,7 +11813,7 @@ snapshots:
'@eslint/config-array@0.20.0': '@eslint/config-array@0.20.0':
dependencies: dependencies:
'@eslint/object-schema': 2.1.6 '@eslint/object-schema': 2.1.6
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
minimatch: 3.1.2 minimatch: 3.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -11824,7 +11827,7 @@ snapshots:
'@eslint/eslintrc@3.3.1': '@eslint/eslintrc@3.3.1':
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
espree: 10.3.0 espree: 10.3.0
globals: 14.0.0 globals: 14.0.0
ignore: 5.3.1 ignore: 5.3.1
@ -12561,9 +12564,9 @@ snapshots:
'@napi-rs/canvas-linux-x64-musl': 0.1.70 '@napi-rs/canvas-linux-x64-musl': 0.1.70
'@napi-rs/canvas-win32-x64-msvc': 0.1.70 '@napi-rs/canvas-win32-x64-msvc': 0.1.70
'@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2)': '@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies: dependencies:
file-type: 20.5.0 file-type: 21.0.0
iterare: 1.2.1 iterare: 1.2.1
load-esm: 1.0.2 load-esm: 1.0.2
reflect-metadata: 0.2.2 reflect-metadata: 0.2.2
@ -12573,9 +12576,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@nestjs/core@11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.17)(reflect-metadata@0.2.2)(rxjs@7.8.2)': '@nestjs/core@11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.18)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies: dependencies:
'@nestjs/common': 11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nuxt/opencollective': 0.4.1 '@nuxt/opencollective': 0.4.1
fast-safe-stringify: 2.1.1 fast-safe-stringify: 2.1.1
iterare: 1.2.1 iterare: 1.2.1
@ -12585,27 +12588,27 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
uid: 2.0.2 uid: 2.0.2
optionalDependencies: optionalDependencies:
'@nestjs/platform-express': 10.4.17(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1) '@nestjs/platform-express': 10.4.18(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)
'@nestjs/platform-express@10.4.17(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1)': '@nestjs/platform-express@10.4.18(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)':
dependencies: dependencies:
'@nestjs/common': 11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.18)(reflect-metadata@0.2.2)(rxjs@7.8.2)
body-parser: 1.20.3 body-parser: 1.20.3
cors: 2.8.5 cors: 2.8.5
express: 4.21.2 express: 4.21.2
multer: 1.4.4-lts.1 multer: 2.0.0
tslib: 2.8.1 tslib: 2.8.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@nestjs/testing@11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1)(@nestjs/platform-express@10.4.17)': '@nestjs/testing@11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)(@nestjs/platform-express@10.4.18)':
dependencies: dependencies:
'@nestjs/common': 11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.1(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.2(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.18)(reflect-metadata@0.2.2)(rxjs@7.8.2)
tslib: 2.8.1 tslib: 2.8.1
optionalDependencies: optionalDependencies:
'@nestjs/platform-express': 10.4.17(@nestjs/common@11.1.1(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.1) '@nestjs/platform-express': 10.4.18(@nestjs/common@11.1.2(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.2)
'@noble/hashes@1.7.1': {} '@noble/hashes@1.7.1': {}
@ -14042,7 +14045,7 @@ snapshots:
ts-dedent: 2.2.0 ts-dedent: 2.2.0
type-fest: 2.19.0 type-fest: 2.19.0
vue: 3.5.14(typescript@5.8.3) vue: 3.5.14(typescript@5.8.3)
vue-component-type-helpers: 2.2.10 vue-component-type-helpers: 3.0.0-alpha.8
'@stylistic/eslint-plugin@2.13.0(eslint@9.27.0)(typescript@5.8.3)': '@stylistic/eslint-plugin@2.13.0(eslint@9.27.0)(typescript@5.8.3)':
dependencies: dependencies:
@ -14286,7 +14289,7 @@ snapshots:
'@tokenizer/inflate@0.2.7': '@tokenizer/inflate@0.2.7':
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
fflate: 0.8.2 fflate: 0.8.2
token-types: 6.0.0 token-types: 6.0.0
transitivePeerDependencies: transitivePeerDependencies:
@ -14672,7 +14675,7 @@ snapshots:
'@typescript-eslint/types': 8.32.1 '@typescript-eslint/types': 8.32.1
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
eslint: 9.27.0 eslint: 9.27.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
@ -14687,7 +14690,7 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3)
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
eslint: 9.27.0 eslint: 9.27.0
ts-api-utils: 2.1.0(typescript@5.8.3) ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3 typescript: 5.8.3
@ -14700,7 +14703,7 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 8.32.1 '@typescript-eslint/types': 8.32.1
'@typescript-eslint/visitor-keys': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
@ -14737,7 +14740,7 @@ snapshots:
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2 '@bcoe/v8-coverage': 1.0.2
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2 istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1 istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6 istanbul-lib-source-maps: 5.0.6
@ -15063,7 +15066,7 @@ snapshots:
agent-base@6.0.2: agent-base@6.0.2:
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true optional: true
@ -16554,7 +16557,7 @@ snapshots:
esbuild-register@3.5.0(esbuild@0.25.4): esbuild-register@3.5.0(esbuild@0.25.4):
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
esbuild: 0.25.4 esbuild: 0.25.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -16701,7 +16704,7 @@ snapshots:
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.3.0 eslint-scope: 8.3.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.0
@ -17038,7 +17041,7 @@ snapshots:
token-types: 6.0.0 token-types: 6.0.0
uint8array-extras: 1.4.0 uint8array-extras: 1.4.0
file-type@20.5.0: file-type@21.0.0:
dependencies: dependencies:
'@tokenizer/inflate': 0.2.7 '@tokenizer/inflate': 0.2.7
strtok3: 10.2.2 strtok3: 10.2.2
@ -17114,7 +17117,7 @@ snapshots:
follow-redirects@1.15.9(debug@4.4.1): follow-redirects@1.15.9(debug@4.4.1):
optionalDependencies: optionalDependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
for-each@0.3.3: for-each@0.3.3:
dependencies: dependencies:
@ -17512,7 +17515,7 @@ snapshots:
http-proxy-agent@7.0.2: http-proxy-agent@7.0.2:
dependencies: dependencies:
agent-base: 7.1.3 agent-base: 7.1.3
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -17540,7 +17543,7 @@ snapshots:
https-proxy-agent@5.0.1: https-proxy-agent@5.0.1:
dependencies: dependencies:
agent-base: 6.0.2 agent-base: 6.0.2
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true optional: true
@ -17548,7 +17551,7 @@ snapshots:
https-proxy-agent@7.0.6: https-proxy-agent@7.0.6:
dependencies: dependencies:
agent-base: 7.1.3 agent-base: 7.1.3
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -17628,7 +17631,7 @@ snapshots:
dependencies: dependencies:
kind-of: 6.0.3 kind-of: 6.0.3
install-artifact-from-github@1.3.5: {} install-artifact-from-github@1.4.0: {}
internal-slot@1.0.7: internal-slot@1.0.7:
dependencies: dependencies:
@ -17642,7 +17645,7 @@ snapshots:
dependencies: dependencies:
'@ioredis/commands': 1.2.0 '@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2 cluster-key-slot: 1.1.2
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
denque: 2.1.0 denque: 2.1.0
lodash.defaults: 4.2.0 lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0 lodash.isarguments: 3.1.0
@ -17852,7 +17855,7 @@ snapshots:
istanbul-lib-source-maps@4.0.1: istanbul-lib-source-maps@4.0.1:
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2 istanbul-lib-coverage: 3.2.2
source-map: 0.6.1 source-map: 0.6.1
transitivePeerDependencies: transitivePeerDependencies:
@ -17861,7 +17864,7 @@ snapshots:
istanbul-lib-source-maps@5.0.6: istanbul-lib-source-maps@5.0.6:
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2 istanbul-lib-coverage: 3.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -18877,7 +18880,7 @@ snapshots:
micromark@4.0.0: micromark@4.0.0:
dependencies: dependencies:
'@types/debug': 4.1.12 '@types/debug': 4.1.12
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
decode-named-character-reference: 1.0.2 decode-named-character-reference: 1.0.2
devlop: 1.1.0 devlop: 1.1.0
micromark-core-commonmark: 2.0.0 micromark-core-commonmark: 2.0.0
@ -19079,7 +19082,7 @@ snapshots:
muggle-string@0.4.1: {} muggle-string@0.4.1: {}
multer@1.4.4-lts.1: multer@2.0.0:
dependencies: dependencies:
append-field: 1.0.0 append-field: 1.0.0
busboy: 1.6.0 busboy: 1.6.0
@ -20092,9 +20095,9 @@ snapshots:
dependencies: dependencies:
setimmediate: 1.0.5 setimmediate: 1.0.5
re2@1.21.5: re2@1.22.1:
dependencies: dependencies:
install-artifact-from-github: 1.3.5 install-artifact-from-github: 1.4.0
nan: 2.22.2 nan: 2.22.2
node-gyp: 11.2.0 node-gyp: 11.2.0
transitivePeerDependencies: transitivePeerDependencies:
@ -20266,7 +20269,7 @@ snapshots:
require-in-the-middle@7.3.0: require-in-the-middle@7.3.0:
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
module-details-from-path: 1.0.3 module-details-from-path: 1.0.3
resolve: 1.22.8 resolve: 1.22.8
transitivePeerDependencies: transitivePeerDependencies:
@ -20623,7 +20626,7 @@ snapshots:
dependencies: dependencies:
'@hapi/hoek': 11.0.4 '@hapi/hoek': 11.0.4
'@hapi/wreck': 18.0.1 '@hapi/wreck': 18.0.1
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
joi: 17.13.3 joi: 17.13.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -20723,7 +20726,7 @@ snapshots:
socks-proxy-agent@8.0.5: socks-proxy-agent@8.0.5:
dependencies: dependencies:
agent-base: 7.1.3 agent-base: 7.1.3
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
socks: 2.8.4 socks: 2.8.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -20820,7 +20823,7 @@ snapshots:
arg: 5.0.2 arg: 5.0.2
bluebird: 3.7.2 bluebird: 3.7.2
check-more-types: 2.24.0 check-more-types: 2.24.0
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
execa: 5.1.1 execa: 5.1.1
lazy-ass: 1.6.0 lazy-ass: 1.6.0
ps-tree: 1.2.0 ps-tree: 1.2.0
@ -20998,7 +21001,7 @@ snapshots:
dependencies: dependencies:
component-emitter: 1.3.1 component-emitter: 1.3.1
cookiejar: 2.1.4 cookiejar: 2.1.4
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
fast-safe-stringify: 2.1.1 fast-safe-stringify: 2.1.1
form-data: 4.0.2 form-data: 4.0.2
formidable: 3.5.4 formidable: 3.5.4
@ -21048,7 +21051,7 @@ snapshots:
symbol-tree@3.2.4: {} symbol-tree@3.2.4: {}
systeminformation@5.26.1: {} systeminformation@5.27.1: {}
tar-fs@2.1.2: tar-fs@2.1.2:
dependencies: dependencies:
@ -21343,7 +21346,7 @@ snapshots:
app-root-path: 3.1.0 app-root-path: 3.1.0
buffer: 6.0.3 buffer: 6.0.3
dayjs: 1.11.13 dayjs: 1.11.13
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
dedent: 1.6.0 dedent: 1.6.0
dotenv: 16.4.7 dotenv: 16.4.7
glob: 10.4.5 glob: 10.4.5
@ -21539,7 +21542,7 @@ snapshots:
vite-node@3.1.4(@types/node@22.15.21)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4): vite-node@3.1.4(@types/node@22.15.21)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
es-module-lexer: 1.7.0 es-module-lexer: 1.7.0
pathe: 2.0.3 pathe: 2.0.3
vite: 6.3.5(@types/node@22.15.21)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4) vite: 6.3.5(@types/node@22.15.21)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)
@ -21588,7 +21591,7 @@ snapshots:
'@vitest/spy': 3.1.4 '@vitest/spy': 3.1.4
'@vitest/utils': 3.1.4 '@vitest/utils': 3.1.4
chai: 5.2.0 chai: 5.2.0
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
expect-type: 1.2.1 expect-type: 1.2.1
magic-string: 0.30.17 magic-string: 0.30.17
pathe: 2.0.3 pathe: 2.0.3
@ -21654,6 +21657,8 @@ snapshots:
vue-component-type-helpers@2.2.10: {} vue-component-type-helpers@2.2.10: {}
vue-component-type-helpers@3.0.0-alpha.8: {}
vue-demi@0.14.7(vue@3.5.14(typescript@5.8.3)): vue-demi@0.14.7(vue@3.5.14(typescript@5.8.3)):
dependencies: dependencies:
vue: 3.5.14(typescript@5.8.3) vue: 3.5.14(typescript@5.8.3)
@ -21675,7 +21680,7 @@ snapshots:
vue-eslint-parser@10.1.3(eslint@9.27.0): vue-eslint-parser@10.1.3(eslint@9.27.0):
dependencies: dependencies:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@5.5.0)
eslint: 9.27.0 eslint: 9.27.0
eslint-scope: 8.3.0 eslint-scope: 8.3.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.0