Merge branch 'develop' into refactor/get-image-size
This commit is contained in:
commit
1757560f36
14 changed files with 281 additions and 39 deletions
|
@ -13,8 +13,6 @@ redis:
|
|||
host: firefish_redis
|
||||
port: 6379
|
||||
|
||||
id: 'aid'
|
||||
|
||||
#allowedPrivateNetworks: [
|
||||
# '10.69.1.0/24'
|
||||
#]
|
||||
|
|
|
@ -645,6 +645,7 @@ deletedNote: "Deleted post"
|
|||
invisibleNote: "Invisible post"
|
||||
enableInfiniteScroll: "Automatically load more"
|
||||
visibility: "Visiblility"
|
||||
cannotEditVisibility: "You can't edit the visibility"
|
||||
poll: "Poll"
|
||||
useCw: "Hide content"
|
||||
enablePlayer: "Open video player"
|
||||
|
@ -1010,6 +1011,8 @@ isSystemAccount: "This account is created and automatically operated by the syst
|
|||
Please do not moderate, edit, delete, or otherwise tamper with this account, or
|
||||
it may break your server."
|
||||
typeToConfirm: "Please enter {x} to confirm"
|
||||
useThisAccountConfirm: "Do you want to continue with this account?"
|
||||
inputAccountId: "Please input your account (e.g., @firefish@info.firefish.dev)"
|
||||
deleteAccount: "Delete account"
|
||||
document: "Documentation"
|
||||
numberOfPageCache: "Number of cached pages"
|
||||
|
@ -1156,6 +1159,9 @@ addRe: "Add \"re:\" at the beginning of comment in reply to a post with a conten
|
|||
confirm: "Confirm"
|
||||
importZip: "Import ZIP"
|
||||
exportZip: "Export ZIP"
|
||||
getQrCode: "Get QR code"
|
||||
remoteFollow: "Remote follow"
|
||||
remoteFollowUrl: "Remote follow URL"
|
||||
emojiPackCreator: "Emoji pack creator"
|
||||
indexable: "Indexable"
|
||||
indexableDescription: "Allow built-in search to show your public posts"
|
||||
|
|
|
@ -928,6 +928,8 @@ colored: "Coloré"
|
|||
label: "Étiquette"
|
||||
localOnly: "Local seulement"
|
||||
account: "Comptes"
|
||||
getQrCode: "Obtenir le code QR"
|
||||
|
||||
_emailUnavailable:
|
||||
used: "Adresse non disponible"
|
||||
format: "Le format de cette adresse de courriel est invalide"
|
||||
|
|
|
@ -564,6 +564,7 @@ deletedNote: "已删除的帖子"
|
|||
invisibleNote: "隐藏的帖子"
|
||||
enableInfiniteScroll: "滚动页面以载入更多内容"
|
||||
visibility: "可见性"
|
||||
cannotEditVisibility: "不能编辑帖子的可见性"
|
||||
poll: "调查问卷"
|
||||
useCw: "隐藏内容"
|
||||
enablePlayer: "打开播放器"
|
||||
|
@ -878,6 +879,8 @@ driveCapOverrideCaption: "输入 0 或以下的值将容量重置为默认值。
|
|||
requireAdminForView: "您需要使用管理员账号登录才能查看。"
|
||||
isSystemAccount: "该账号由系统自动创建。请不要修改、编辑、删除或以其它方式篡改这个账号,否则可能会破坏您的服务器。"
|
||||
typeToConfirm: "输入 {x} 以确认操作"
|
||||
useThisAccountConfirm: "您想使用此帐户继续执行此操作吗?"
|
||||
inputAccountId: "请输入您的帐户(例如 @firefish@info.firefish.dev )"
|
||||
deleteAccount: "删除账号"
|
||||
document: "文档"
|
||||
numberOfPageCache: "缓存页数"
|
||||
|
@ -1973,6 +1976,9 @@ origin: 起源
|
|||
confirm: 确认
|
||||
importZip: 导入 ZIP
|
||||
exportZip: 导出 ZIP
|
||||
getQrCode: "获取二维码"
|
||||
remoteFollow: "远程关注"
|
||||
remoteFollowUrl: "远程关注 URL"
|
||||
emojiPackCreator: 表情包创建工具
|
||||
objectStorageS3ForcePathStyleDesc: 打开此选项可构建格式为 "s3.amazonaws.com/<bucket>/" 而非 "<bucket>.s3.amazonaws.com"
|
||||
的端点 URL。
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
"@types/matter-js": "0.19.6",
|
||||
"@types/prismjs": "^1.26.3",
|
||||
"@types/punycode": "2.1.4",
|
||||
"@types/qrcode": "1.5.1",
|
||||
"@types/seedrandom": "3.0.8",
|
||||
"@types/textarea-caret": "^3.0.3",
|
||||
"@types/throttle-debounce": "5.0.2",
|
||||
|
@ -60,13 +61,17 @@
|
|||
"insert-text-at-cursor": "0.3.0",
|
||||
"json5": "2.2.3",
|
||||
"katex": "0.16.10",
|
||||
"long": "^5.2.3",
|
||||
"libopenmpt-wasm": "github:TheEssem/libopenmpt-packaging#build",
|
||||
"matter-js": "0.19.0",
|
||||
"mfm-js": "0.24.0",
|
||||
"multer": "1.4.4-lts.1",
|
||||
"moment": "2.30.1",
|
||||
"photoswipe": "5.4.3",
|
||||
"prismjs": "1.29.0",
|
||||
"punycode": "2.3.1",
|
||||
"qrcode": "1.5.3",
|
||||
"qrcode-vue3": "^1.6.8",
|
||||
"rollup": "4.14.2",
|
||||
"s-age": "1.1.2",
|
||||
"sass": "1.75.0",
|
||||
|
|
|
@ -33,9 +33,9 @@
|
|||
></span>
|
||||
<button
|
||||
ref="visibilityButton"
|
||||
v-tooltip="i18n.ts.visibility"
|
||||
v-tooltip="editId == null ? i18n.ts.visibility : i18n.ts.cannotEditVisibility"
|
||||
class="_button visibility"
|
||||
:disabled="channel != null"
|
||||
:disabled="channel != null || editId != null"
|
||||
@click="setVisibility"
|
||||
>
|
||||
<span v-if="visibility === 'public'"
|
||||
|
|
68
packages/client/src/components/MkQrCode.vue
Normal file
68
packages/client/src/components/MkQrCode.vue
Normal file
|
@ -0,0 +1,68 @@
|
|||
<template>
|
||||
<MkModal ref="modal" :z-priority="'middle'" @closed="$emit('closed')">
|
||||
<div :class="$style.root">
|
||||
<div :class="$style.title">
|
||||
<QRCodeVue3
|
||||
:value="qrCode"
|
||||
/>
|
||||
</div>
|
||||
<MkButton :class="$style.gotIt" primary full @click="gotIt()">{{
|
||||
i18n.ts.gotIt
|
||||
}}</MkButton>
|
||||
</div>
|
||||
</MkModal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { shallowRef } from "vue";
|
||||
import MkModal from "@/components/MkModal.vue";
|
||||
import MkButton from "@/components/MkButton.vue";
|
||||
import { i18n } from "@/i18n";
|
||||
import QRCodeVue3 from "qrcode-vue3";
|
||||
|
||||
const props = defineProps<{
|
||||
qrCode: string;
|
||||
}>();
|
||||
|
||||
const modal = shallowRef<InstanceType<typeof MkModal>>();
|
||||
|
||||
const gotIt = () => {
|
||||
modal.value.close();
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
.root {
|
||||
margin: auto;
|
||||
position: relative;
|
||||
padding: 32px;
|
||||
min-width: 320px;
|
||||
max-width: 480px;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
background: var(--panel);
|
||||
border-radius: var(--radius);
|
||||
|
||||
> img {
|
||||
border-radius: 10px;
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: bold;
|
||||
|
||||
> p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.time {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.gotIt {
|
||||
margin: 8px 0 0 0;
|
||||
}
|
||||
</style>
|
|
@ -59,7 +59,7 @@ if (
|
|||
) {
|
||||
useTooltip(specified, async (showing) => {
|
||||
const users = await os.api("users/show", {
|
||||
userIds: props.note.visibleUserIds,
|
||||
userIds: props.note.visibleUserIds!,
|
||||
limit: 10,
|
||||
});
|
||||
|
||||
|
@ -68,7 +68,7 @@ if (
|
|||
{
|
||||
showing,
|
||||
users,
|
||||
count: props.note.visibleUserIds.length,
|
||||
count: props.note.visibleUserIds!.length,
|
||||
targetElement: specified.value,
|
||||
},
|
||||
{},
|
||||
|
|
|
@ -7,6 +7,7 @@ import type { Component, MaybeRef, Ref } from "vue";
|
|||
import { defineAsyncComponent, markRaw, ref } from "vue";
|
||||
import { i18n } from "./i18n";
|
||||
import MkDialog from "@/components/MkDialog.vue";
|
||||
import MkQrCode from "@/components/MkQrCode.vue";
|
||||
import MkPostFormDialog from "@/components/MkPostFormDialog.vue";
|
||||
import MkToast from "@/components/MkToast.vue";
|
||||
import MkWaitingDialog from "@/components/MkWaitingDialog.vue";
|
||||
|
@ -1003,6 +1004,25 @@ export function post(
|
|||
});
|
||||
}
|
||||
|
||||
export async function displayQrCode(qrCode: string) {
|
||||
(
|
||||
await new Promise<(() => void) | undefined>((resolve) => {
|
||||
let dispose: (() => void) | undefined;
|
||||
popup(
|
||||
MkQrCode,
|
||||
{ qrCode },
|
||||
{
|
||||
closed: () => {
|
||||
resolve(dispose);
|
||||
},
|
||||
},
|
||||
).then((res) => {
|
||||
dispose = res.dispose;
|
||||
});
|
||||
})
|
||||
)?.();
|
||||
}
|
||||
|
||||
export const deckGlobalEvents = new EventEmitter();
|
||||
|
||||
/*
|
||||
|
|
74
packages/client/src/pages/follow-me.vue
Normal file
74
packages/client/src/pages/follow-me.vue
Normal file
|
@ -0,0 +1,74 @@
|
|||
<template>
|
||||
<div class="mk-follow-page"></div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { acct } from "firefish-js";
|
||||
import * as os from "@/os";
|
||||
import { i18n } from "@/i18n";
|
||||
import { host as hostRaw } from "@/config";
|
||||
import { isSignedIn, me } from "@/me";
|
||||
import { waiting } from "@/os";
|
||||
|
||||
const acctUri = new URL(location.href).searchParams.get("acct");
|
||||
if (acctUri == null) {
|
||||
throw new Error("acct required");
|
||||
}
|
||||
|
||||
// If the user is already logged in, ask whether to follow using the current account.
|
||||
if (isSignedIn(me)) {
|
||||
const { canceled } = await os.confirm({
|
||||
type: "question",
|
||||
text: i18n.ts.useThisAccountConfirm,
|
||||
});
|
||||
|
||||
// use the current account
|
||||
if (!canceled) {
|
||||
waiting();
|
||||
window.location.href = `/authorize-follow?acct=${acctUri}`;
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise ask the user what the other account ID is
|
||||
const remoteAccountId = await os.inputText({
|
||||
text: i18n.ts.inputAccountId,
|
||||
});
|
||||
|
||||
// If the user do not want enter uri, the user will be redirected to the user page.
|
||||
if (!remoteAccountId.result) {
|
||||
waiting();
|
||||
window.location.href = `/@${acctUri}`;
|
||||
} else {
|
||||
const remoteAcctInfo = acct.parse(remoteAccountId.result);
|
||||
|
||||
// If the user on this server, redirect directly
|
||||
if (remoteAcctInfo.host === hostRaw || remoteAcctInfo.host === null) {
|
||||
waiting();
|
||||
window.location.href = `/authorize-follow?acct=${acctUri}`;
|
||||
} else {
|
||||
waiting();
|
||||
// If not, find the interaction url through webfinger interface
|
||||
fetch(
|
||||
`https://${remoteAcctInfo.host}/.well-known/webfinger?resource=${remoteAcctInfo.username}@${remoteAcctInfo.host}`,
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
)
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
const subscribeUri = data.links.find(
|
||||
(link: { rel: string; }) => link.rel === "http://ostatus.org/schema/1.0/subscribe",
|
||||
).template;
|
||||
window.location.href = subscribeUri.replace(
|
||||
"{uri}",
|
||||
acctUri.includes("@") ? acctUri : `${acctUri}@${hostRaw}`,
|
||||
);
|
||||
})
|
||||
.catch((_) => {
|
||||
// TODO: It would be better to provide more information, but the priority of
|
||||
// waiting component is too high and the pop-up window will be blocked.
|
||||
window.location.href = `/@${acctUri}`;
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -325,6 +325,10 @@ export const routes: RouteDef[] = [
|
|||
component: page(() => import("./pages/follow.vue")),
|
||||
loginRequired: true,
|
||||
},
|
||||
{
|
||||
path: "/follow-me",
|
||||
component: page(() => import("./pages/follow-me.vue")),
|
||||
},
|
||||
{
|
||||
path: "/authorize_interaction",
|
||||
component: page(() => import("./pages/authorize_interaction.vue")),
|
||||
|
|
|
@ -49,11 +49,22 @@ export function getNoteMenu(props: {
|
|||
});
|
||||
}
|
||||
|
||||
async function getVisibleUsers() {
|
||||
if (appearNote.visibleUserIds && appearNote.visibleUserIds.length > 0) {
|
||||
const users = await os.api("users/show", {
|
||||
userIds: appearNote.visibleUserIds,
|
||||
});
|
||||
return users;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function delEdit(): void {
|
||||
os.confirm({
|
||||
type: "warning",
|
||||
text: i18n.ts.deleteAndEditConfirm,
|
||||
}).then(({ canceled }) => {
|
||||
}).then(async ({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
os.api("notes/delete", {
|
||||
|
@ -65,17 +76,19 @@ export function getNoteMenu(props: {
|
|||
renote: appearNote.renote,
|
||||
reply: appearNote.reply,
|
||||
channel: appearNote.channel,
|
||||
initialVisibleUsers: await getVisibleUsers(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function edit(): void {
|
||||
async function edit() {
|
||||
os.post({
|
||||
initialNote: appearNote,
|
||||
renote: appearNote.renote,
|
||||
reply: appearNote.reply,
|
||||
channel: appearNote.channel,
|
||||
editId: appearNote.id,
|
||||
initialVisibleUsers: await getVisibleUsers(),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -281,6 +281,13 @@ export function getUserMenu(user, router: Router = mainRouter) {
|
|||
copyToClipboard(`https://${host}/@${user.username}.json`);
|
||||
},
|
||||
},
|
||||
{
|
||||
icon: `${icon("ph-hand-waving")}`,
|
||||
text: i18n.ts.remoteFollowUrl,
|
||||
action: () => {
|
||||
copyToClipboard(`https://${host}/follow-me?acct=${user.username}`);
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -290,6 +297,22 @@ export function getUserMenu(user, router: Router = mainRouter) {
|
|||
os.post({ specified: user });
|
||||
},
|
||||
},
|
||||
!isSignedIn(me)
|
||||
? {
|
||||
icon: `${icon("ph-hand-waving")}`,
|
||||
text: i18n.ts.remoteFollow,
|
||||
action: () => {
|
||||
router.push(`/follow-me?acct=${user.username}`);
|
||||
},
|
||||
}
|
||||
: undefined,
|
||||
{
|
||||
icon: "ph-qr-code ph-bold ph-lg",
|
||||
text: i18n.ts.getQrCode,
|
||||
action: () => {
|
||||
os.displayQrCode(`https://${host}/follow-me?acct=${user.username}`);
|
||||
},
|
||||
},
|
||||
isSignedIn(me) && me.id !== user.id
|
||||
? {
|
||||
type: "link",
|
||||
|
|
|
@ -593,6 +593,9 @@ importers:
|
|||
'@types/punycode':
|
||||
specifier: 2.1.4
|
||||
version: 2.1.4
|
||||
'@types/qrcode':
|
||||
specifier: 1.5.1
|
||||
version: 1.5.1
|
||||
'@types/seedrandom':
|
||||
specifier: 3.0.8
|
||||
version: 3.0.8
|
||||
|
@ -692,6 +695,9 @@ importers:
|
|||
libopenmpt-wasm:
|
||||
specifier: github:TheEssem/libopenmpt-packaging#build
|
||||
version: github.com/TheEssem/libopenmpt-packaging/d05d151a72b638c6312227af0417aca69521172c
|
||||
long:
|
||||
specifier: ^5.2.3
|
||||
version: 5.2.3
|
||||
matter-js:
|
||||
specifier: 0.19.0
|
||||
version: 0.19.0
|
||||
|
@ -701,6 +707,9 @@ importers:
|
|||
moment:
|
||||
specifier: 2.30.1
|
||||
version: 2.30.1
|
||||
multer:
|
||||
specifier: 1.4.4-lts.1
|
||||
version: 1.4.4-lts.1
|
||||
photoswipe:
|
||||
specifier: 5.4.3
|
||||
version: 5.4.3
|
||||
|
@ -710,6 +719,12 @@ importers:
|
|||
punycode:
|
||||
specifier: 2.3.1
|
||||
version: 2.3.1
|
||||
qrcode:
|
||||
specifier: 1.5.3
|
||||
version: 1.5.3
|
||||
qrcode-vue3:
|
||||
specifier: ^1.6.8
|
||||
version: 1.6.8
|
||||
rollup:
|
||||
specifier: 4.14.2
|
||||
version: 4.14.2
|
||||
|
@ -819,7 +834,7 @@ importers:
|
|||
version: 9.3.1
|
||||
ts-jest:
|
||||
specifier: ^29.1.2
|
||||
version: 29.1.2(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.4.5)
|
||||
version: 29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.5)
|
||||
ts-node:
|
||||
specifier: 10.9.2
|
||||
version: 10.9.2(@swc/core@1.4.13)(@types/node@20.12.7)(typescript@5.4.5)
|
||||
|
@ -931,7 +946,7 @@ importers:
|
|||
version: 4.17.21
|
||||
ts-jest:
|
||||
specifier: ^29.0.5
|
||||
version: 29.1.1(@babel/core@7.24.4)(jest@29.7.0)(typescript@4.9.4)
|
||||
version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@4.9.4)
|
||||
typedoc:
|
||||
specifier: ^0.23.24
|
||||
version: 0.23.28(typescript@4.9.4)
|
||||
|
@ -4381,6 +4396,12 @@ packages:
|
|||
resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==}
|
||||
dev: true
|
||||
|
||||
/@types/qrcode@1.5.1:
|
||||
resolution: {integrity: sha512-HpSN675K0PmxIDRpjMI3Mc2GiKo3dNu+X/F5SoItiaDS1lVfgC6Wac1c5lQDfKWbTJUSHWiHKzpJpBZG7k9gaA==}
|
||||
dependencies:
|
||||
'@types/node': 20.12.7
|
||||
dev: true
|
||||
|
||||
/@types/qrcode@1.5.5:
|
||||
resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==}
|
||||
dependencies:
|
||||
|
@ -5419,7 +5440,6 @@ packages:
|
|||
|
||||
/append-field@1.0.0:
|
||||
resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
|
||||
dev: false
|
||||
|
||||
/aproba@2.0.0:
|
||||
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
|
||||
|
@ -6290,7 +6310,6 @@ packages:
|
|||
engines: {node: '>=10.16.0'}
|
||||
dependencies:
|
||||
streamsearch: 1.1.0
|
||||
dev: false
|
||||
|
||||
/bytes@3.1.2:
|
||||
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
|
||||
|
@ -6744,7 +6763,6 @@ packages:
|
|||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wrap-ansi: 6.2.0
|
||||
dev: false
|
||||
|
||||
/cliui@7.0.4:
|
||||
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
|
||||
|
@ -6987,7 +7005,6 @@ packages:
|
|||
inherits: 2.0.4
|
||||
readable-stream: 2.3.8
|
||||
typedarray: 0.0.6
|
||||
dev: false
|
||||
|
||||
/concordance@5.0.4:
|
||||
resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==}
|
||||
|
@ -7266,7 +7283,6 @@ packages:
|
|||
|
||||
/core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
dev: false
|
||||
|
||||
/crc-32@1.2.2:
|
||||
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
|
||||
|
@ -7804,7 +7820,6 @@ packages:
|
|||
|
||||
/dijkstrajs@1.0.3:
|
||||
resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
|
||||
dev: false
|
||||
|
||||
/dir-glob@3.0.1:
|
||||
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
|
||||
|
@ -7987,7 +8002,6 @@ packages:
|
|||
|
||||
/encode-utf8@1.0.3:
|
||||
resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
|
||||
dev: false
|
||||
|
||||
/encodeurl@1.0.2:
|
||||
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
|
||||
|
@ -11121,7 +11135,6 @@ packages:
|
|||
|
||||
/isarray@1.0.0:
|
||||
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
|
||||
dev: false
|
||||
|
||||
/isarray@2.0.5:
|
||||
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
|
||||
|
@ -12507,6 +12520,10 @@ packages:
|
|||
engines: {node: '>= 0.6.0'}
|
||||
dev: false
|
||||
|
||||
/long@5.2.3:
|
||||
resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
|
||||
dev: true
|
||||
|
||||
/lowercase-keys@2.0.0:
|
||||
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -12679,7 +12696,6 @@ packages:
|
|||
/media-typer@0.3.0:
|
||||
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/memoize@10.0.0:
|
||||
resolution: {integrity: sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==}
|
||||
|
@ -12905,7 +12921,6 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
minimist: 1.2.8
|
||||
dev: false
|
||||
|
||||
/mkdirp@1.0.4:
|
||||
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
|
||||
|
@ -13005,6 +13020,19 @@ packages:
|
|||
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
|
||||
dev: true
|
||||
|
||||
/multer@1.4.4-lts.1:
|
||||
resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
dependencies:
|
||||
append-field: 1.0.0
|
||||
busboy: 1.6.0
|
||||
concat-stream: 1.6.2
|
||||
mkdirp: 0.5.6
|
||||
object-assign: 4.1.1
|
||||
type-is: 1.6.18
|
||||
xtend: 4.0.2
|
||||
dev: true
|
||||
|
||||
/multer@1.4.5-lts.1:
|
||||
resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
|
@ -14036,7 +14064,6 @@ packages:
|
|||
/pngjs@5.0.0:
|
||||
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
dev: false
|
||||
|
||||
/pngjs@7.0.0:
|
||||
resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
|
||||
|
@ -14642,6 +14669,16 @@ packages:
|
|||
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
|
||||
dev: false
|
||||
|
||||
/qrcode-generator@1.4.4:
|
||||
resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==}
|
||||
dev: true
|
||||
|
||||
/qrcode-vue3@1.6.8:
|
||||
resolution: {integrity: sha512-LtMnwKWi58ZqHbXBcsTF/VxDYhI6RrBIrDQw8fbDVlO8p5tJBZa7TaIaVYLY937vKO2WCEBmOKksGlpm5ccEIg==}
|
||||
dependencies:
|
||||
qrcode-generator: 1.4.4
|
||||
dev: true
|
||||
|
||||
/qrcode@1.5.3:
|
||||
resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
@ -14651,7 +14688,6 @@ packages:
|
|||
encode-utf8: 1.0.3
|
||||
pngjs: 5.0.0
|
||||
yargs: 15.4.1
|
||||
dev: false
|
||||
|
||||
/qs@6.12.1:
|
||||
resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==}
|
||||
|
@ -14783,7 +14819,6 @@ packages:
|
|||
safe-buffer: 5.1.2
|
||||
string_decoder: 1.1.1
|
||||
util-deprecate: 1.0.2
|
||||
dev: false
|
||||
|
||||
/readable-stream@3.6.2:
|
||||
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
||||
|
@ -15024,7 +15059,6 @@ packages:
|
|||
|
||||
/require-main-filename@2.0.0:
|
||||
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
|
||||
dev: false
|
||||
|
||||
/resolve-alpn@1.2.1:
|
||||
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
|
||||
|
@ -15204,7 +15238,6 @@ packages:
|
|||
|
||||
/safe-buffer@5.1.2:
|
||||
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
|
||||
dev: false
|
||||
|
||||
/safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
|
@ -15746,7 +15779,6 @@ packages:
|
|||
/streamsearch@1.1.0:
|
||||
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
dev: false
|
||||
|
||||
/streamx@2.15.1:
|
||||
resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==}
|
||||
|
@ -15836,7 +15868,6 @@ packages:
|
|||
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
|
||||
dependencies:
|
||||
safe-buffer: 5.1.2
|
||||
dev: false
|
||||
|
||||
/string_decoder@1.3.0:
|
||||
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
|
||||
|
@ -16398,7 +16429,7 @@ packages:
|
|||
typescript: 5.4.5
|
||||
dev: true
|
||||
|
||||
/ts-jest@29.1.1(@babel/core@7.24.4)(jest@29.7.0)(typescript@4.9.4):
|
||||
/ts-jest@29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@4.9.4):
|
||||
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
|
||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||
hasBin: true
|
||||
|
@ -16419,7 +16450,7 @@ packages:
|
|||
esbuild:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@babel/core': 7.24.4
|
||||
'@babel/core': 7.23.2
|
||||
bs-logger: 0.2.6
|
||||
fast-json-stable-stringify: 2.1.0
|
||||
jest: 29.7.0(@types/node@18.11.18)
|
||||
|
@ -16432,7 +16463,7 @@ packages:
|
|||
yargs-parser: 21.1.1
|
||||
dev: true
|
||||
|
||||
/ts-jest@29.1.2(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.4.5):
|
||||
/ts-jest@29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.4.5):
|
||||
resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==}
|
||||
engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0}
|
||||
hasBin: true
|
||||
|
@ -16453,7 +16484,7 @@ packages:
|
|||
esbuild:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@babel/core': 7.23.2
|
||||
'@babel/core': 7.24.4
|
||||
bs-logger: 0.2.6
|
||||
fast-json-stable-stringify: 2.1.0
|
||||
jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2)
|
||||
|
@ -16646,7 +16677,6 @@ packages:
|
|||
dependencies:
|
||||
media-typer: 0.3.0
|
||||
mime-types: 2.1.35
|
||||
dev: false
|
||||
|
||||
/type@1.2.0:
|
||||
resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
|
||||
|
@ -16702,7 +16732,6 @@ packages:
|
|||
|
||||
/typedarray@0.0.6:
|
||||
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
||||
dev: false
|
||||
|
||||
/typedoc@0.23.28(typescript@4.9.4):
|
||||
resolution: {integrity: sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==}
|
||||
|
@ -17465,7 +17494,6 @@ packages:
|
|||
|
||||
/which-module@2.0.1:
|
||||
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
|
||||
dev: false
|
||||
|
||||
/which-typed-array@1.1.11:
|
||||
resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
|
||||
|
@ -17536,7 +17564,6 @@ packages:
|
|||
ansi-styles: 4.3.0
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
dev: false
|
||||
|
||||
/wrap-ansi@7.0.0:
|
||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||
|
@ -17640,7 +17667,6 @@ packages:
|
|||
/xtend@4.0.2:
|
||||
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
|
||||
engines: {node: '>=0.4'}
|
||||
dev: false
|
||||
|
||||
/y18n@3.2.2:
|
||||
resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
|
||||
|
@ -17648,7 +17674,6 @@ packages:
|
|||
|
||||
/y18n@4.0.3:
|
||||
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
|
||||
dev: false
|
||||
|
||||
/y18n@5.0.8:
|
||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
||||
|
@ -17693,7 +17718,6 @@ packages:
|
|||
dependencies:
|
||||
camelcase: 5.3.1
|
||||
decamelize: 1.2.0
|
||||
dev: false
|
||||
|
||||
/yargs-parser@20.2.4:
|
||||
resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
|
||||
|
@ -17740,7 +17764,6 @@ packages:
|
|||
which-module: 2.0.1
|
||||
y18n: 4.0.3
|
||||
yargs-parser: 18.1.3
|
||||
dev: false
|
||||
|
||||
/yargs@16.2.0:
|
||||
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
|
||||
|
|
Loading…
Reference in a new issue