Merge branch 'Huskydog9988-more-fixes' into develop
This commit is contained in:
@@ -24,7 +24,6 @@ export default defineNuxtConfig({
|
||||
},
|
||||
|
||||
routeRules: {
|
||||
"/auth/**": { prerender: true },
|
||||
"/api/**": { cors: true },
|
||||
},
|
||||
|
||||
|
||||
+8
-10
@@ -8,7 +8,7 @@
|
||||
"dev": "nuxt dev",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"postinstall": "nuxt prepare",
|
||||
"postinstall": "prisma generate && nuxt prepare",
|
||||
"typecheck": "nuxt typecheck"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -18,29 +18,27 @@
|
||||
"@nuxt/fonts": "^0.11.0",
|
||||
"@nuxt/image": "^1.10.0",
|
||||
"@nuxtjs/tailwindcss": "^6.12.2",
|
||||
"@prisma/client": "^6.1.0",
|
||||
"@prisma/client": "^6.5.0",
|
||||
"@tailwindcss/vite": "^4.0.6",
|
||||
"argon2": "^0.41.1",
|
||||
"arktype": "^2.1.10",
|
||||
"axios": "^1.7.7",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"cookie-es": "^1.2.2",
|
||||
"crypto": "^1.0.1",
|
||||
"bcryptjs": "^3.0.2",
|
||||
"cookie-es": "^2.0.0",
|
||||
"fast-fuzzy": "^1.12.0",
|
||||
"file-type-mime": "^0.4.3",
|
||||
"jdenticon": "^3.3.0",
|
||||
"lru-cache": "^11.1.0",
|
||||
"luxon": "^3.6.1",
|
||||
"micromark": "^4.0.1",
|
||||
"moment": "^2.30.1",
|
||||
"nuxt": "3.15.4",
|
||||
"nuxt-security": "2.2.0",
|
||||
"prisma": "^6.1.0",
|
||||
"prisma": "^6.5.0",
|
||||
"sanitize-filename": "^1.6.3",
|
||||
"sharp": "^0.33.5",
|
||||
"stream": "^0.0.3",
|
||||
"stream-mime-type": "^2.0.0",
|
||||
"turndown": "^7.2.0",
|
||||
"uuid": "^10.0.0",
|
||||
"vue": "latest",
|
||||
"vue-router": "latest",
|
||||
"vue3-carousel": "^0.15.0",
|
||||
@@ -51,11 +49,11 @@
|
||||
"@tailwindcss/forms": "^0.5.9",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/bcryptjs": "^2.4.6",
|
||||
"@types/luxon": "^3.6.2",
|
||||
"@types/node": "^22.13.16",
|
||||
"@types/turndown": "^5.0.5",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"h3": "^1.13.0",
|
||||
"h3": "^1.15.1",
|
||||
"postcss": "^8.4.47",
|
||||
"sass": "^1.79.4",
|
||||
"tailwindcss": "^4.0.0",
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
</ul>
|
||||
</td>
|
||||
<td class="whitespace-nowrap px-3 py-4 text-sm text-zinc-400">
|
||||
{{ moment(client.lastConnected).fromNow() }}
|
||||
{{ DateTime.fromISO(client.lastConnected).toRelative() }}
|
||||
</td>
|
||||
<td
|
||||
class="relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-3"
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { CheckIcon } from "@heroicons/vue/24/outline";
|
||||
import moment from "moment";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
const clients = ref(await $dropFetch("/api/v1/user/client"));
|
||||
|
||||
|
||||
@@ -352,7 +352,6 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ClientOnly } from "#build/components";
|
||||
import {
|
||||
Dialog,
|
||||
DialogPanel,
|
||||
@@ -380,8 +379,8 @@ import {
|
||||
XCircleIcon,
|
||||
} from "@heroicons/vue/24/solid";
|
||||
import type { Invitation } from "@prisma/client";
|
||||
import moment from "moment";
|
||||
import type { SerializeObject } from "nitropack";
|
||||
import { DateTime, DurationLike } from "luxon";
|
||||
|
||||
definePageMeta({
|
||||
layout: "admin",
|
||||
@@ -439,13 +438,25 @@ const validEmail = computed(() =>
|
||||
const isAdmin = ref(false);
|
||||
|
||||
// Label to parameters to moment.js .add()
|
||||
const expiry = {
|
||||
"3 days": [3, "days"],
|
||||
"7 days": [7, "days"],
|
||||
"1 month": [1, "month"],
|
||||
"6 months": [6, "month"],
|
||||
"1 year": [1, "year"],
|
||||
Never: [3000, "year"], // Never is relative, right?
|
||||
const expiry: Record<string, DurationLike> = {
|
||||
"3 days": {
|
||||
days: 3,
|
||||
},
|
||||
"7 days": {
|
||||
days: 7,
|
||||
},
|
||||
"1 month": {
|
||||
month: 1,
|
||||
},
|
||||
"6 months": {
|
||||
months: 6,
|
||||
},
|
||||
"1 year": {
|
||||
year: 1,
|
||||
},
|
||||
Never: {
|
||||
year: 3000,
|
||||
}, // Never is relative, right?
|
||||
};
|
||||
const expiryKey = ref<keyof typeof expiry>(Object.keys(expiry)[0] as any); // Cast to any because we just know it's okay
|
||||
|
||||
@@ -453,9 +464,7 @@ const loading = ref(false);
|
||||
const error = ref<undefined | string>();
|
||||
|
||||
async function invite() {
|
||||
const expiryDate = moment()
|
||||
.add(...expiry[expiryKey.value])
|
||||
.toJSON();
|
||||
const expiryDate = DateTime.now().plus(expiry[expiryKey.value]).toJSON();
|
||||
|
||||
const newInvitation = await $dropFetch("/api/v1/admin/auth/invitation", {
|
||||
method: "POST",
|
||||
|
||||
@@ -54,7 +54,11 @@
|
||||
Released
|
||||
</td>
|
||||
<td class="whitespace-nowrap px-3 py-4 text-sm text-zinc-400">
|
||||
{{ moment(game.mReleased).format("Do MMMM, YYYY") }}
|
||||
{{
|
||||
DateTime.fromJSDate(game.mReleased).toFormat(
|
||||
"Do MMMM, YYYY"
|
||||
)
|
||||
}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -166,7 +170,7 @@ import { ArrowTopRightOnSquareIcon } from "@heroicons/vue/24/outline";
|
||||
import { StarIcon } from "@heroicons/vue/24/solid";
|
||||
import { type Game, type GameVersion } from "@prisma/client";
|
||||
import { micromark } from "micromark";
|
||||
import moment from "moment";
|
||||
import { DateTime } from "luxon";
|
||||
import { PlatformClient } from "~/composables/types";
|
||||
import { ref } from "vue";
|
||||
import AddLibraryButton from "~/components/AddLibraryButton.vue";
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import { AuthMec, Invitation } from "@prisma/client";
|
||||
import prisma from "~/server/internal/db/database";
|
||||
import {
|
||||
createHashArgon2,
|
||||
} from "~/server/internal/security/simple";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { createHashArgon2 } from "~/server/internal/security/simple";
|
||||
import * as jdenticon from "jdenticon";
|
||||
import objectHandler from "~/server/internal/objects";
|
||||
import { type } from "arktype";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { writeNonLiteralDefaultMessage } from "arktype/internal/parser/shift/operator/default.ts";
|
||||
|
||||
const userValidator = type({
|
||||
@@ -59,9 +57,9 @@ export default defineEventHandler(async (h3) => {
|
||||
statusMessage: "Username already taken.",
|
||||
});
|
||||
|
||||
const userId = uuidv4();
|
||||
const userId = randomUUID();
|
||||
|
||||
const profilePictureId = uuidv4();
|
||||
const profilePictureId = randomUUID();
|
||||
await objectHandler.createFromSource(
|
||||
profilePictureId,
|
||||
async () => jdenticon.toPng(user.username, 256),
|
||||
|
||||
@@ -3,7 +3,6 @@ import { EventHandlerRequest, H3Event } from "h3";
|
||||
import droplet from "@drop-oss/droplet";
|
||||
import prisma from "../db/database";
|
||||
import { useCertificateAuthority } from "~/server/plugins/ca";
|
||||
import moment from "moment";
|
||||
|
||||
export type EventHandlerFunction<T> = (
|
||||
h3: H3Event<EventHandlerRequest>,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { CertificateBundle } from "./ca";
|
||||
import prisma from "../db/database";
|
||||
import { Platform } from "@prisma/client";
|
||||
@@ -20,7 +20,7 @@ export class ClientHandler {
|
||||
} = {};
|
||||
|
||||
async initiate(metadata: ClientMetadata) {
|
||||
const clientId = uuidv4();
|
||||
const clientId = randomUUID();
|
||||
|
||||
this.temporaryClientTable[clientId] = {
|
||||
data: metadata,
|
||||
@@ -53,7 +53,7 @@ export class ClientHandler {
|
||||
const entry = this.temporaryClientTable[clientId];
|
||||
if (!entry) throw new Error("Invalid clientId to generate token");
|
||||
|
||||
const token = uuidv4();
|
||||
const token = randomUUID();
|
||||
this.temporaryClientTable[clientId].authToken = token;
|
||||
|
||||
return token;
|
||||
|
||||
@@ -10,8 +10,8 @@ import {
|
||||
DeveloperMetadata,
|
||||
} from "./types";
|
||||
import axios, { AxiosRequestConfig } from "axios";
|
||||
import moment from "moment";
|
||||
import TurndownService from "turndown";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
interface GiantBombResponseType<T> {
|
||||
error: "OK" | string;
|
||||
@@ -140,7 +140,7 @@ export class GiantBombProvider implements MetadataProvider {
|
||||
const mapped = results.data.results.map((result) => {
|
||||
const date =
|
||||
(result.original_release_date
|
||||
? moment(result.original_release_date).year()
|
||||
? DateTime.fromISO(result.original_release_date).year
|
||||
: result.expected_release_year) ?? 0;
|
||||
|
||||
const metadata: GameMetadataSearchResult = {
|
||||
@@ -191,12 +191,12 @@ export class GiantBombProvider implements MetadataProvider {
|
||||
const images = [banner, ...imageURLs.map(createObject)];
|
||||
|
||||
const releaseDate = gameData.original_release_date
|
||||
? moment(gameData.original_release_date).toDate()
|
||||
: moment(
|
||||
`${gameData.expected_release_day ?? 1}/${
|
||||
? DateTime.fromISO(gameData.original_release_date).toJSDate()
|
||||
: DateTime.fromISO(
|
||||
`${gameData.expected_release_year ?? new Date().getFullYear()}-${
|
||||
gameData.expected_release_month ?? 1
|
||||
}/${gameData.expected_release_year ?? new Date().getFullYear()}`
|
||||
).toDate();
|
||||
}-${gameData.expected_release_day ?? 1}`
|
||||
).toJSDate();
|
||||
|
||||
const metadata: GameMetadata = {
|
||||
id: gameData.guid,
|
||||
|
||||
@@ -10,8 +10,7 @@ import {
|
||||
DeveloperMetadata,
|
||||
} from "./types";
|
||||
import axios, { AxiosRequestConfig } from "axios";
|
||||
import { inspect } from "util";
|
||||
import moment from "moment";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
type IGDBID = number;
|
||||
|
||||
@@ -132,7 +131,7 @@ export class IGDBProvider implements MetadataProvider {
|
||||
private clientId: string;
|
||||
private clientSecret: string;
|
||||
private accessToken: string;
|
||||
private accessTokenExpiry: moment.Moment;
|
||||
private accessTokenExpiry: DateTime;
|
||||
|
||||
constructor() {
|
||||
const client_id = process.env.IGDB_CLIENT_ID;
|
||||
@@ -149,7 +148,9 @@ export class IGDBProvider implements MetadataProvider {
|
||||
this.clientSecret = client_secret;
|
||||
|
||||
this.accessToken = "";
|
||||
this.accessTokenExpiry = moment(new Date(0));
|
||||
this.accessTokenExpiry = DateTime.now().minus({
|
||||
year: 1,
|
||||
});
|
||||
}
|
||||
|
||||
private async authWithTwitch() {
|
||||
@@ -167,15 +168,18 @@ export class IGDBProvider implements MetadataProvider {
|
||||
});
|
||||
|
||||
this.accessToken = response.data.access_token;
|
||||
this.accessTokenExpiry = moment().add(response.data.expires_in, "seconds");
|
||||
this.accessTokenExpiry = DateTime.now().plus({
|
||||
seconds: response.data.expires_in,
|
||||
});
|
||||
}
|
||||
|
||||
private async refreshCredentials() {
|
||||
const futureTime = moment().add(1, "day");
|
||||
const futureTime = DateTime.now().plus({
|
||||
day: 1,
|
||||
});
|
||||
|
||||
// if the token expires in less than a day
|
||||
if (this.accessTokenExpiry.isBefore(futureTime))
|
||||
await this.authWithTwitch();
|
||||
if (this.accessTokenExpiry < futureTime) await this.authWithTwitch();
|
||||
}
|
||||
|
||||
private async request<T extends Object>(
|
||||
@@ -279,7 +283,7 @@ export class IGDBProvider implements MetadataProvider {
|
||||
name: response[i].name,
|
||||
icon: await this.getCoverURL(response[i].cover),
|
||||
description: response[i].summary,
|
||||
year: moment.unix(response[i].first_release_date).year(),
|
||||
year: DateTime.fromSeconds(response[i].first_release_date).year,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -340,7 +344,9 @@ export class IGDBProvider implements MetadataProvider {
|
||||
name: response[i].name,
|
||||
shortDescription: this.trimMessage(response[i].summary, 280),
|
||||
description: response[i].summary,
|
||||
released: moment.unix(response[i].first_release_date).toDate(),
|
||||
released: DateTime.fromSeconds(
|
||||
response[i].first_release_date
|
||||
).toJSDate(),
|
||||
|
||||
reviewCount: response[i]?.total_rating_count ?? 0,
|
||||
reviewRating: (response[i]?.total_rating ?? 0) / 100,
|
||||
|
||||
@@ -10,8 +10,8 @@ import {
|
||||
DeveloperMetadata,
|
||||
} from "./types";
|
||||
import axios, { AxiosRequestConfig } from "axios";
|
||||
import moment from "moment";
|
||||
import * as jdenticon from "jdenticon";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
interface PCGamingWikiPage {
|
||||
PageID: string;
|
||||
@@ -116,7 +116,8 @@ export class PCGamingWikiProvider implements MetadataProvider {
|
||||
description: "", // TODO: need to render the `Introduction` template somehow (or we could just hardcode it)
|
||||
year:
|
||||
game.Released !== null && game.Released.length > 0
|
||||
? moment(game.Released).year()
|
||||
? // sometimes will provide multiple dates
|
||||
DateTime.fromISO(game.Released.split(";")[0]).year
|
||||
: 0,
|
||||
};
|
||||
return metadata;
|
||||
@@ -193,7 +194,7 @@ export class PCGamingWikiProvider implements MetadataProvider {
|
||||
shortDescription: "", // TODO: (again) need to render the `Introduction` template somehow (or we could just hardcode it)
|
||||
description: "",
|
||||
released: game.Released
|
||||
? moment(game.Released.split(";").at(0)).toDate()
|
||||
? DateTime.fromISO(game.Released.split(";")[0]).toJSDate()
|
||||
: new Date(),
|
||||
|
||||
reviewCount: 0,
|
||||
|
||||
@@ -11,7 +11,6 @@ import sanitize from "sanitize-filename";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { Readable, Stream } from "stream";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
export class FsObjectBackend extends ObjectBackend {
|
||||
private baseObjectPath: string;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
import { parse as getMimeTypeBuffer } from "file-type-mime";
|
||||
import Stream, { Readable, Writable } from "stream";
|
||||
import { getMimeType as getMimeTypeStream } from "stream-mime-type";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
export type ObjectReference = string;
|
||||
export type ObjectMetadata = {
|
||||
|
||||
@@ -3,7 +3,7 @@ The purpose of this class is to hold references to remote objects (like images)
|
||||
This is used as a utility in metadata handling, so we only fetch the objects if we're actually creating a database record.
|
||||
*/
|
||||
import { Readable } from "stream";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import objectHandler from ".";
|
||||
|
||||
export type TransactionDataType = string | Readable | Buffer;
|
||||
@@ -21,12 +21,12 @@ export class ObjectTransactionalHandler {
|
||||
metadata: { [key: string]: string },
|
||||
permissions: Array<string>
|
||||
): [Register, Pull, Dump] {
|
||||
const transactionId = uuidv4();
|
||||
const transactionId = randomUUID();
|
||||
|
||||
this.record[transactionId] ??= {};
|
||||
|
||||
const register = (data: TransactionDataType) => {
|
||||
const objectId = uuidv4();
|
||||
const objectId = randomUUID();
|
||||
this.record[transactionId][objectId] = data;
|
||||
|
||||
return objectId;
|
||||
|
||||
@@ -2,8 +2,7 @@ import Stream, { Readable } from "stream";
|
||||
import prisma from "../db/database";
|
||||
import { applicationSettings } from "../config/application-configuration";
|
||||
import objectHandler from "../objects";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import crypto from "crypto";
|
||||
import { randomUUID, createHash } from "node:crypto";
|
||||
import { IncomingMessage } from "http";
|
||||
|
||||
class SaveManager {
|
||||
@@ -35,7 +34,7 @@ class SaveManager {
|
||||
if (!save)
|
||||
throw createError({ statusCode: 404, statusMessage: "Save not found" });
|
||||
|
||||
const newSaveObjectId = uuidv4();
|
||||
const newSaveObjectId = randomUUID();
|
||||
const newSaveStream = await objectHandler.createWithStream(
|
||||
newSaveObjectId,
|
||||
{ saveSlot: JSON.stringify({ userId, gameId, index }) },
|
||||
@@ -50,7 +49,7 @@ class SaveManager {
|
||||
let hash: string | undefined;
|
||||
const hashPromise = Stream.promises.pipeline(
|
||||
stream,
|
||||
crypto.createHash("sha256").setEncoding("hex"),
|
||||
createHash("sha256").setEncoding("hex"),
|
||||
async function (source) {
|
||||
// Not sure how to get this to be typed
|
||||
// @ts-expect-error
|
||||
|
||||
@@ -2,10 +2,10 @@ import { H3Event } from "h3";
|
||||
import createMemorySessionProvider from "./memory";
|
||||
import { Session, SessionProvider } from "./types";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import moment from "moment";
|
||||
import { parse as parseCookies } from "cookie-es";
|
||||
import { MinimumRequestObject } from "~/server/h3";
|
||||
import createDBSessionHandler from "./db";
|
||||
import { DateTime, DurationLike } from "luxon";
|
||||
|
||||
/*
|
||||
This implementation may need work.
|
||||
@@ -14,8 +14,12 @@ It exposes an API that should stay static, but there are plenty of opportunities
|
||||
*/
|
||||
|
||||
const dropTokenCookieName = "drop-token";
|
||||
const normalSessionLength = [31, "days"];
|
||||
const extendedSessionLength = [1, "year"];
|
||||
const normalSessionLength: DurationLike = {
|
||||
days: 31,
|
||||
};
|
||||
const extendedSessionLength: DurationLike = {
|
||||
year: 1,
|
||||
};
|
||||
|
||||
export class SessionHandler {
|
||||
private sessionProvider: SessionProvider;
|
||||
@@ -96,9 +100,9 @@ export class SessionHandler {
|
||||
}
|
||||
|
||||
private createExipreAt(rememberMe: boolean) {
|
||||
return moment()
|
||||
.add(...(rememberMe ? extendedSessionLength : normalSessionLength))
|
||||
.toDate();
|
||||
return DateTime.now()
|
||||
.plus(rememberMe ? extendedSessionLength : normalSessionLength)
|
||||
.toJSDate();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+17
-27
@@ -1354,7 +1354,7 @@
|
||||
resolved "https://registry.yarnpkg.com/@poppinss/exception/-/exception-1.2.1.tgz#8a5f2120fabb64a99772166d537d8a97490209ff"
|
||||
integrity sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==
|
||||
|
||||
"@prisma/client@^6.1.0":
|
||||
"@prisma/client@^6.5.0":
|
||||
version "6.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-6.5.0.tgz#b5f4aa3820ff523734ef4e8dffe364ac9888369e"
|
||||
integrity sha512-M6w1Ql/BeiGoZmhMdAZUXHu5sz5HubyVcKukbLs3l0ELcQb8hTUJxtGEChhv4SVJ0QJlwtLnwOLgIRQhpsm9dw==
|
||||
@@ -1743,6 +1743,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"
|
||||
integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
|
||||
|
||||
"@types/luxon@^3.6.2":
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.6.2.tgz#be6536931801f437eafcb9c0f6d6781f72308041"
|
||||
integrity sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==
|
||||
|
||||
"@types/ms@*":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78"
|
||||
@@ -1777,11 +1782,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/turndown/-/turndown-5.0.5.tgz#614de24fc9ace4d8c0d9483ba81dc8c1976dd26f"
|
||||
integrity sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==
|
||||
|
||||
"@types/uuid@^10.0.0":
|
||||
version "10.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d"
|
||||
integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==
|
||||
|
||||
"@unhead/dom@1.11.20", "@unhead/dom@^1.11.18":
|
||||
version "1.11.20"
|
||||
resolved "https://registry.yarnpkg.com/@unhead/dom/-/dom-1.11.20.tgz#b777f439e1c5f80ebcceb89aa45c45e877013c62"
|
||||
@@ -2319,10 +2319,10 @@ basic-auth@^2.0.1:
|
||||
dependencies:
|
||||
safe-buffer "5.1.2"
|
||||
|
||||
bcryptjs@^2.4.3:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
|
||||
integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
|
||||
bcryptjs@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-3.0.2.tgz#caadcca1afefe372ed6e20f86db8e8546361c1ca"
|
||||
integrity sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.3.0"
|
||||
@@ -2823,11 +2823,6 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6:
|
||||
dependencies:
|
||||
uncrypto "^0.1.3"
|
||||
|
||||
crypto@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
|
||||
integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
|
||||
|
||||
css-declaration-sorter@^7.2.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024"
|
||||
@@ -3802,7 +3797,7 @@ gzip-size@^7.0.0:
|
||||
dependencies:
|
||||
duplexer "^0.1.2"
|
||||
|
||||
h3@^1.10.0, h3@^1.12.0, h3@^1.13.0, h3@^1.14.0, h3@^1.15.0, h3@^1.15.1:
|
||||
h3@^1.10.0, h3@^1.12.0, h3@^1.14.0, h3@^1.15.0, h3@^1.15.1:
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.1.tgz#59d6f70d7ef619fad74ecdf465a08fff898033bb"
|
||||
integrity sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==
|
||||
@@ -4518,6 +4513,11 @@ lru-cache@^5.1.1:
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
luxon@^3.6.1:
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0"
|
||||
integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==
|
||||
|
||||
magic-regexp@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/magic-regexp/-/magic-regexp-0.8.0.tgz#c67de16456522a83672c22aa408b774facfd882e"
|
||||
@@ -4922,11 +4922,6 @@ mocked-exports@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/mocked-exports/-/mocked-exports-0.1.1.tgz#6916efea9a9dd0f4abd6a0a72526f56a76c966ea"
|
||||
integrity sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==
|
||||
|
||||
moment@^2.30.1:
|
||||
version "2.30.1"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
|
||||
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
|
||||
|
||||
mrmime@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
|
||||
@@ -5818,7 +5813,7 @@ pretty-bytes@^6.1.1:
|
||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b"
|
||||
integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==
|
||||
|
||||
prisma@^6.1.0:
|
||||
prisma@^6.5.0:
|
||||
version "6.5.0"
|
||||
resolved "https://registry.yarnpkg.com/prisma/-/prisma-6.5.0.tgz#0a02859bb59edb8821db4e63257c7f8de2d461a1"
|
||||
integrity sha512-yUGXmWqv5F4PByMSNbYFxke/WbnyTLjnJ5bKr8fLkcnY7U5rU9rUTh/+Fja+gOrRxEgtCbCtca94IeITj4j/pg==
|
||||
@@ -7142,11 +7137,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
uuid@^10.0.0:
|
||||
version "10.0.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
|
||||
integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
|
||||
|
||||
vary@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
|
||||
Reference in New Issue
Block a user