diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 24027d88..780b927f 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,5 +1,5 @@
# Bun doesn't run well on Musl but this seems to work
-FROM oven/bun:1.2.0-alpine as base
+FROM oven/bun:1.2.1-alpine as base
# Switch to Bash by editing /etc/passwd
RUN apk add --no-cache libstdc++ git bash curl openssh cloc && \
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c69283b4..b85d64bd 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -7,7 +7,8 @@
"federation",
"config",
"plugin",
- "worker"
+ "worker",
+ "media"
],
"languageToolLinter.languageTool.ignoredWordsInWorkspace": ["versia"]
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a8508274..f4b6b986 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,7 +10,7 @@ Versia Server `0.8.0` is fully backwards compatible with `0.7.0`.
- Added an administration UI for managing the queue.
- Media processing is now also handled by a queue system.
- Added [Push Notifications](https://docs.joinmastodon.org/methods/push) support.
-- Upgraded Bun to `1.2.0`.
+- Upgraded Bun to `1.2.1`.
- Implemented support for the [**Instance Messaging Extension**](https://versia.pub/extensions/instance-messaging)
- Implement [**Shared Inboxes**](https://versia.pub/federation#inboxes) support.
- Allowed `
` and `
` tags in Markdown.
diff --git a/Dockerfile b/Dockerfile
index 7b6bec89..9c85cb9a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -26,7 +26,7 @@ RUN bun run build
WORKDIR /temp/dist
# Copy production dependencies and source code into final image
-FROM oven/bun:1.2.0-alpine
+FROM oven/bun:1.2.1-alpine
# Install libstdc++ for Bun and create app directory
RUN apk add --no-cache libstdc++ && \
diff --git a/Worker.Dockerfile b/Worker.Dockerfile
index 6202f333..053f5efc 100644
--- a/Worker.Dockerfile
+++ b/Worker.Dockerfile
@@ -26,7 +26,7 @@ RUN bun run build:worker
WORKDIR /temp/dist
# Copy production dependencies and source code into final image
-FROM oven/bun:1.2.0-alpine
+FROM oven/bun:1.2.1-alpine
# Install libstdc++ for Bun and create app directory
RUN apk add --no-cache libstdc++ && \
diff --git a/api/api/v1/accounts/update_credentials/index.ts b/api/api/v1/accounts/update_credentials/index.ts
index 1888114d..f44ade7f 100644
--- a/api/api/v1/accounts/update_credentials/index.ts
+++ b/api/api/v1/accounts/update_credentials/index.ts
@@ -1,16 +1,14 @@
import { apiRoute, auth, jsonOrForm } from "@/api";
-import { mimeLookup } from "@/content_types";
import { mergeAndDeduplicate } from "@/lib";
import { sanitizedHtmlStrip } from "@/sanitization";
import { createRoute } from "@hono/zod-openapi";
-import { Emoji, Media, User } from "@versia/kit/db";
+import { Emoji, User } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm";
import ISO6391 from "iso-639-1";
import { z } from "zod";
import { ApiError } from "~/classes/errors/api-error";
import { contentToHtml } from "~/classes/functions/status";
-import { MediaManager } from "~/classes/media/media-manager";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@@ -61,6 +59,7 @@ const schemas = {
.min(1)
.max(2000)
.url()
+ .transform((a) => new URL(a))
.or(
z
.instanceof(File)
@@ -76,6 +75,7 @@ const schemas = {
.min(1)
.max(2000)
.url()
+ .transform((v) => new URL(v))
.or(
z
.instanceof(File)
@@ -204,8 +204,6 @@ export default apiRoute((app) =>
display_name ?? "",
);
- const mediaManager = new MediaManager(config);
-
if (display_name) {
self.displayName = sanitizedDisplayName;
}
@@ -247,37 +245,17 @@ export default apiRoute((app) =>
if (avatar) {
if (avatar instanceof File) {
- const { path, uploadedFile } =
- await mediaManager.addFile(avatar);
- const contentType = uploadedFile.type;
-
- self.avatar = Media.getUrl(path);
- self.source.avatar = {
- content_type: contentType,
- };
+ await user.avatar?.updateFromFile(avatar);
} else {
- self.avatar = avatar;
- self.source.avatar = {
- content_type: await mimeLookup(avatar),
- };
+ await user.avatar?.updateFromUrl(avatar);
}
}
if (header) {
if (header instanceof File) {
- const { path, uploadedFile } =
- await mediaManager.addFile(header);
- const contentType = uploadedFile.type;
-
- self.header = Media.getUrl(path);
- self.source.header = {
- content_type: contentType,
- };
+ await user.header?.updateFromFile(header);
} else {
- self.header = header;
- self.source.header = {
- content_type: await mimeLookup(header),
- };
+ await user.header?.updateFromUrl(header);
}
}
diff --git a/api/api/v1/emojis/:id/index.ts b/api/api/v1/emojis/:id/index.ts
index 6ef58025..a1a80a15 100644
--- a/api/api/v1/emojis/:id/index.ts
+++ b/api/api/v1/emojis/:id/index.ts
@@ -1,12 +1,10 @@
import { apiRoute, auth, emojiValidator, jsonOrForm } from "@/api";
import { mimeLookup } from "@/content_types";
import { createRoute } from "@hono/zod-openapi";
-import { Emoji, Media, db } from "@versia/kit/db";
-import { Emojis, RolePermissions } from "@versia/kit/tables";
-import { eq } from "drizzle-orm";
+import { Emoji } from "@versia/kit/db";
+import { RolePermissions } from "@versia/kit/tables";
import { z } from "zod";
import { ApiError } from "~/classes/errors/api-error";
-import { MediaManager } from "~/classes/media/media-manager";
import { config } from "~/packages/config-manager";
import { ErrorSchema } from "~/types/api";
@@ -31,6 +29,7 @@ const schemas = {
.min(1)
.max(2000)
.url()
+ .transform((a) => new URL(a))
.or(
z
.instanceof(File)
@@ -230,8 +229,6 @@ export default apiRoute((app) => {
);
}
- const mediaManager = new MediaManager(config);
-
const {
global: emojiGlobal,
alt,
@@ -248,11 +245,9 @@ export default apiRoute((app) => {
);
}
- const modified = structuredClone(emoji.data);
-
if (element) {
// Check of emoji is an image
- let contentType =
+ const contentType =
element instanceof File
? element.type
: await mimeLookup(element);
@@ -265,30 +260,24 @@ export default apiRoute((app) => {
);
}
- let url = "";
-
if (element instanceof File) {
- const uploaded = await mediaManager.addFile(element);
-
- url = Media.getUrl(uploaded.path);
- contentType = uploaded.uploadedFile.type;
+ await emoji.media.updateFromFile(element);
} else {
- url = element;
+ await emoji.media.updateFromUrl(element);
}
-
- modified.url = url;
- modified.contentType = contentType;
}
- modified.shortcode = shortcode ?? modified.shortcode;
- modified.alt = alt ?? modified.alt;
- modified.category = category ?? modified.category;
-
- if (emojiGlobal !== undefined) {
- modified.ownerId = emojiGlobal ? null : user.data.id;
+ if (alt) {
+ await emoji.media.updateMetadata({
+ description: alt,
+ });
}
- await emoji.update(modified);
+ await emoji.update({
+ shortcode,
+ ownerId: emojiGlobal ? null : user.data.id,
+ category,
+ });
return context.json(emoji.toApi(), 200);
});
@@ -315,11 +304,7 @@ export default apiRoute((app) => {
);
}
- const mediaManager = new MediaManager(config);
-
- await mediaManager.deleteFileByUrl(emoji.data.url);
-
- await db.delete(Emojis).where(eq(Emojis.id, id));
+ await emoji.delete();
return context.body(null, 204);
});
diff --git a/api/api/v1/emojis/index.ts b/api/api/v1/emojis/index.ts
index 268c0813..b198d65d 100644
--- a/api/api/v1/emojis/index.ts
+++ b/api/api/v1/emojis/index.ts
@@ -6,7 +6,6 @@ import { Emojis, RolePermissions } from "@versia/kit/tables";
import { and, eq, isNull, or } from "drizzle-orm";
import { z } from "zod";
import { ApiError } from "~/classes/errors/api-error";
-import { MediaManager } from "~/classes/media/media-manager";
import { config } from "~/packages/config-manager";
import { ErrorSchema } from "~/types/api";
@@ -27,6 +26,7 @@ const schemas = {
.min(1)
.max(2000)
.url()
+ .transform((a) => new URL(a))
.or(
z
.instanceof(File)
@@ -130,10 +130,8 @@ export default apiRoute((app) =>
);
}
- let url = "";
-
// Check of emoji is an image
- let contentType =
+ const contentType =
element instanceof File ? element.type : await mimeLookup(element);
if (!contentType.startsWith("image/")) {
@@ -144,25 +142,21 @@ export default apiRoute((app) =>
);
}
- if (element instanceof File) {
- const mediaManager = new MediaManager(config);
-
- const uploaded = await mediaManager.addFile(element);
-
- url = Media.getUrl(uploaded.path);
- contentType = uploaded.uploadedFile.type;
- } else {
- url = element;
- }
+ const media =
+ element instanceof File
+ ? await Media.fromFile(element, {
+ description: alt,
+ })
+ : await Media.fromUrl(element, {
+ description: alt,
+ });
const emoji = await Emoji.insert({
shortcode,
- url,
+ mediaId: media.id,
visibleInPicker: true,
ownerId: global ? null : user.id,
category,
- contentType,
- alt,
});
return context.json(emoji.toApi(), 201);
diff --git a/api/api/v1/media/:id/index.ts b/api/api/v1/media/:id/index.ts
index 83621c69..a7ce3e91 100644
--- a/api/api/v1/media/:id/index.ts
+++ b/api/api/v1/media/:id/index.ts
@@ -4,7 +4,6 @@ import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { z } from "zod";
import { ApiError } from "~/classes/errors/api-error";
-import { MediaManager } from "~/classes/media/media-manager";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@@ -101,38 +100,26 @@ export default apiRoute((app) => {
app.openapi(routePut, async (context) => {
const { id } = context.req.valid("param");
- const attachment = await Media.fromId(id);
+ const media = await Media.fromId(id);
- if (!attachment) {
+ if (!media) {
throw new ApiError(404, "Media not found");
}
- const { description, thumbnail } = context.req.valid("form");
+ const { description, thumbnail: thumbnailFile } =
+ context.req.valid("form");
- let thumbnailUrl = attachment.data.thumbnailUrl;
-
- const mediaManager = new MediaManager(config);
-
- if (thumbnail) {
- const { path } = await mediaManager.addFile(thumbnail);
- thumbnailUrl = Media.getUrl(path);
+ if (thumbnailFile) {
+ await media.updateThumbnail(thumbnailFile);
}
- const descriptionText = description || attachment.data.description;
-
- if (
- descriptionText !== attachment.data.description ||
- thumbnailUrl !== attachment.data.thumbnailUrl
- ) {
- await attachment.update({
- description: descriptionText,
- thumbnailUrl,
+ if (description) {
+ await media.updateMetadata({
+ description,
});
-
- return context.json(attachment.toApi(), 200);
}
- return context.json(attachment.toApi(), 200);
+ return context.json(media.toApi(), 200);
});
app.openapi(routeGet, async (context) => {
diff --git a/api/api/v1/profile/avatar.ts b/api/api/v1/profile/avatar.ts
index 427306ea..e7380bc8 100644
--- a/api/api/v1/profile/avatar.ts
+++ b/api/api/v1/profile/avatar.ts
@@ -30,9 +30,7 @@ export default apiRoute((app) =>
app.openapi(route, async (context) => {
const { user } = context.get("auth");
- await user.update({
- avatar: "",
- });
+ await user.header?.delete();
return context.json(user.toApi(true), 200);
}),
diff --git a/api/api/v1/profile/header.ts b/api/api/v1/profile/header.ts
index 6e4e8dc3..d6389d94 100644
--- a/api/api/v1/profile/header.ts
+++ b/api/api/v1/profile/header.ts
@@ -30,9 +30,7 @@ export default apiRoute((app) =>
app.openapi(route, async (context) => {
const { user } = context.get("auth");
- await user.update({
- header: "",
- });
+ await user.header?.delete();
return context.json(user.toApi(true), 200);
}),
diff --git a/api/api/v1/statuses/index.test.ts b/api/api/v1/statuses/index.test.ts
index c1aa6d3a..e5c002d1 100644
--- a/api/api/v1/statuses/index.test.ts
+++ b/api/api/v1/statuses/index.test.ts
@@ -1,12 +1,13 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { Status as ApiStatus } from "@versia/client/types";
-import { db } from "@versia/kit/db";
+import { Media, db } from "@versia/kit/db";
import { Emojis } from "@versia/kit/tables";
import { eq } from "drizzle-orm";
import { config } from "~/packages/config-manager/index.ts";
import { fakeRequest, getTestUsers } from "~/tests/utils";
const { users, tokens, deleteUsers } = await getTestUsers(5);
+let media: Media;
afterAll(async () => {
await deleteUsers();
@@ -14,10 +15,17 @@ afterAll(async () => {
});
beforeAll(async () => {
+ media = await Media.insert({
+ content: {
+ "image/png": {
+ content: "https://example.com/test.png",
+ remote: true,
+ },
+ },
+ });
await db.insert(Emojis).values({
- contentType: "image/png",
shortcode: "test",
- url: "https://example.com/test.png",
+ mediaId: media.id,
visibleInPicker: true,
});
});
diff --git a/build-worker.ts b/build-worker.ts
index 7b001f3e..29f9f044 100644
--- a/build-worker.ts
+++ b/build-worker.ts
@@ -11,11 +11,6 @@ await Bun.build({
target: "bun",
splitting: true,
minify: false,
-}).then((output) => {
- if (!output.success) {
- console.error(output.logs);
- throw new Error("Build failed");
- }
});
buildSpinner.text = "Transforming";
diff --git a/build.ts b/build.ts
index 0b11f780..fd74fbd5 100644
--- a/build.ts
+++ b/build.ts
@@ -26,11 +26,6 @@ await Bun.build({
splitting: true,
minify: false,
external: ["unzipit", "acorn", "@bull-board/ui"],
-}).then((output) => {
- if (!output.success) {
- console.error(output.logs);
- throw new Error("Build failed");
- }
});
buildSpinner.text = "Transforming";
diff --git a/bun.lock b/bun.lock
index 9aa763bc..eee98e9b 100644
--- a/bun.lock
+++ b/bun.lock
@@ -4,7 +4,6 @@
"": {
"name": "versia-server",
"dependencies": {
- "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@0.8.0",
"@bull-board/api": "^6.7.1",
"@bull-board/hono": "^6.7.1",
"@hackmd/markdown-it-task-lists": "^2.1.4",
@@ -17,22 +16,22 @@
"@json2csv/plainjs": "^7.0.6",
"@logtape/logtape": "npm:@jsr/logtape__logtape@0.9.0-dev.114+327c9473",
"@oclif/core": "^4.2.4",
- "@sentry/bun": "^8.51.0",
+ "@sentry/bun": "^8.52.0",
"@tufjs/canonical-json": "^2.0.0",
"@versia/client": "^0.1.5",
"@versia/federation": "^0.1.4",
"@versia/kit": "workspace:*",
"altcha-lib": "^1.2.0",
"blurhash": "^2.0.5",
- "bullmq": "^5.35.1",
+ "bullmq": "^5.38.0",
"c12": "^2.0.1",
"chalk": "^5.4.1",
"cli-progress": "^3.12.0",
"cli-table": "^0.3.11",
"confbox": "^0.1.8",
- "drizzle-orm": "^0.38.4",
+ "drizzle-orm": "^0.39.0",
"extract-zip": "^2.0.1",
- "hono": "^4.6.18",
+ "hono": "^4.6.19",
"html-to-text": "^9.0.5",
"ioredis": "^5.4.2",
"ip-matching": "^2.1.2",
@@ -68,20 +67,20 @@
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
- "@types/bun": "^1.2.0",
+ "@types/bun": "^1.2.1",
"@types/cli-progress": "^3.11.6",
"@types/cli-table": "^0.3.4",
"@types/html-to-text": "^9.0.4",
"@types/jsonld": "^1.5.15",
"@types/markdown-it-container": "^2.0.10",
"@types/mime-types": "^2.1.4",
- "@types/pg": "^8.11.10",
+ "@types/pg": "^8.11.11",
"@types/qs": "^6.9.18",
"@types/web-push": "^3.6.4",
- "drizzle-kit": "^0.30.2",
+ "drizzle-kit": "^0.30.3",
"markdown-it-image-figures": "^2.1.1",
"markdown-it-mathjax3": "^4.3.2",
- "oclif": "^4.17.17",
+ "oclif": "^4.17.20",
"ts-prune": "^0.10.3",
"typescript": "^5.7.3",
"vitepress": "^1.6.3",
@@ -126,31 +125,31 @@
"@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.17.7", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg=="],
- "@algolia/client-abtesting": ["@algolia/client-abtesting@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-DLIrAukjsSrdMNNDx1ZTks72o4RH/1kOn8Wx5zZm8nnqFexG+JzY4SANnCNEjnFQPJTTvC+KpgiNW/CP2lumng=="],
+ "@algolia/client-abtesting": ["@algolia/client-abtesting@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww=="],
- "@algolia/client-analytics": ["@algolia/client-analytics@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-0VpGG2uQW+h2aejxbG8VbnMCQ9ary9/ot7OASXi6OjE0SRkYQ/+pkW+q09+IScif3pmsVVYggmlMPtAsmYWHng=="],
+ "@algolia/client-analytics": ["@algolia/client-analytics@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw=="],
- "@algolia/client-common": ["@algolia/client-common@5.18.0", "", {}, "sha512-X1WMSC+1ve2qlMsemyTF5bIjwipOT+m99Ng1Tyl36ZjQKTa54oajBKE0BrmM8LD8jGdtukAgkUhFoYOaRbMcmQ=="],
+ "@algolia/client-common": ["@algolia/client-common@5.20.0", "", {}, "sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA=="],
- "@algolia/client-insights": ["@algolia/client-insights@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-FAJRNANUOSs/FgYOJ/Njqp+YTe4TMz2GkeZtfsw1TMiA5mVNRS/nnMpxas9771aJz7KTEWvK9GwqPs0K6RMYWg=="],
+ "@algolia/client-insights": ["@algolia/client-insights@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg=="],
- "@algolia/client-personalization": ["@algolia/client-personalization@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-I2dc94Oiwic3SEbrRp8kvTZtYpJjGtg5y5XnqubgnA15AgX59YIY8frKsFG8SOH1n2rIhUClcuDkxYQNXJLg+w=="],
+ "@algolia/client-personalization": ["@algolia/client-personalization@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ=="],
- "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-x6XKIQgKFTgK/bMasXhghoEjHhmgoP61pFPb9+TaUJ32aKOGc65b12usiGJ9A84yS73UDkXS452NjyP50Knh/g=="],
+ "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw=="],
- "@algolia/client-search": ["@algolia/client-search@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-qI3LcFsVgtvpsBGR7aNSJYxhsR+Zl46+958ODzg8aCxIcdxiK7QEVLMJMZAR57jGqW0Lg/vrjtuLFDMfSE53qA=="],
+ "@algolia/client-search": ["@algolia/client-search@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ=="],
- "@algolia/ingestion": ["@algolia/ingestion@1.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-bGvJg7HnGGm+XWYMDruZXWgMDPVt4yCbBqq8DM6EoaMBK71SYC4WMfIdJaw+ABqttjBhe6aKNRkWf/bbvYOGyw=="],
+ "@algolia/ingestion": ["@algolia/ingestion@1.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA=="],
- "@algolia/monitoring": ["@algolia/monitoring@1.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-lBssglINIeGIR+8KyzH05NAgAmn1BCrm5D2T6pMtr/8kbTHvvrm1Zvcltc5dKUQEFyyx3J5+MhNc7kfi8LdjVw=="],
+ "@algolia/monitoring": ["@algolia/monitoring@1.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw=="],
- "@algolia/recommend": ["@algolia/recommend@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-uSnkm0cdAuFwdMp4pGT5vHVQ84T6AYpTZ3I0b3k/M3wg4zXDhl3aCiY8NzokEyRLezz/kHLEEcgb/tTTobOYVw=="],
+ "@algolia/recommend": ["@algolia/recommend@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw=="],
- "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0" } }, "sha512-1XFjW0C3pV0dS/9zXbV44cKI+QM4ZIz9cpatXpsjRlq6SUCpLID3DZHsXyE6sTb8IhyPaUjk78GEJT8/3hviqg=="],
+ "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0" } }, "sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg=="],
- "@algolia/requester-fetch": ["@algolia/requester-fetch@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0" } }, "sha512-0uodeNdAHz1YbzJh6C5xeQ4T6x5WGiUxUq3GOaT/R4njh5t78dq+Rb187elr7KtnjUmETVVuCvmEYaThfTHzNg=="],
+ "@algolia/requester-fetch": ["@algolia/requester-fetch@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0" } }, "sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ=="],
- "@algolia/requester-node-http": ["@algolia/requester-node-http@5.18.0", "", { "dependencies": { "@algolia/client-common": "5.18.0" } }, "sha512-tZCqDrqJ2YE2I5ukCQrYN8oiF6u3JIdCxrtKq+eniuLkjkO78TKRnXrVcKZTmfFJyyDK8q47SfDcHzAA3nHi6w=="],
+ "@algolia/requester-node-http": ["@algolia/requester-node-http@5.20.0", "", { "dependencies": { "@algolia/client-common": "5.20.0" } }, "sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw=="],
"@asteasolutions/zod-to-openapi": ["@asteasolutions/zod-to-openapi@7.3.0", "", { "dependencies": { "openapi3-ts": "^4.1.2" }, "peerDependencies": { "zod": "^3.20.2" } }, "sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q=="],
@@ -168,69 +167,69 @@
"@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="],
- "@aws-sdk/client-cloudfront": ["@aws-sdk/client-cloudfront@3.730.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/credential-provider-node": "3.730.0", "@aws-sdk/middleware-host-header": "3.723.0", "@aws-sdk/middleware-logger": "3.723.0", "@aws-sdk/middleware-recursion-detection": "3.723.0", "@aws-sdk/middleware-user-agent": "3.730.0", "@aws-sdk/region-config-resolver": "3.723.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-endpoints": "3.730.0", "@aws-sdk/util-user-agent-browser": "3.723.0", "@aws-sdk/util-user-agent-node": "3.730.0", "@aws-sdk/xml-builder": "3.723.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/hash-node": "^4.0.0", "@smithy/invalid-dependency": "^4.0.0", "@smithy/middleware-content-length": "^4.0.0", "@smithy/middleware-endpoint": "^4.0.0", "@smithy/middleware-retry": "^4.0.0", "@smithy/middleware-serde": "^4.0.0", "@smithy/middleware-stack": "^4.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/url-parser": "^4.0.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.0", "@smithy/util-defaults-mode-node": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-retry": "^4.0.0", "@smithy/util-stream": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-oQH8t3qVtN6+2ftxF9Ug2clvH0v1E0bJGRbX61iqZ6GnoeN/n5sjA/5u6qnIJJseO6wtIj2VlAhTI+duQ2Rfig=="],
+ "@aws-sdk/client-cloudfront": ["@aws-sdk/client-cloudfront@3.734.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/credential-provider-node": "3.734.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.734.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.734.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.734.0", "@aws-sdk/xml-builder": "3.734.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.1", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.2", "@smithy/middleware-retry": "^4.0.3", "@smithy/middleware-serde": "^4.0.1", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.3", "@smithy/util-defaults-mode-node": "^4.0.3", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-j0R5arpRRBHRBKrnRmwXECCKFNOYdjGAmkpVS27GNuE6hJ2h2CBGJvb+XRzqZiEhna40+VeBn0/39yroMb157g=="],
- "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.730.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/credential-provider-node": "3.730.0", "@aws-sdk/middleware-bucket-endpoint": "3.726.0", "@aws-sdk/middleware-expect-continue": "3.723.0", "@aws-sdk/middleware-flexible-checksums": "3.730.0", "@aws-sdk/middleware-host-header": "3.723.0", "@aws-sdk/middleware-location-constraint": "3.723.0", "@aws-sdk/middleware-logger": "3.723.0", "@aws-sdk/middleware-recursion-detection": "3.723.0", "@aws-sdk/middleware-sdk-s3": "3.730.0", "@aws-sdk/middleware-ssec": "3.723.0", "@aws-sdk/middleware-user-agent": "3.730.0", "@aws-sdk/region-config-resolver": "3.723.0", "@aws-sdk/signature-v4-multi-region": "3.730.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-endpoints": "3.730.0", "@aws-sdk/util-user-agent-browser": "3.723.0", "@aws-sdk/util-user-agent-node": "3.730.0", "@aws-sdk/xml-builder": "3.723.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/eventstream-serde-browser": "^4.0.0", "@smithy/eventstream-serde-config-resolver": "^4.0.0", "@smithy/eventstream-serde-node": "^4.0.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/hash-blob-browser": "^4.0.0", "@smithy/hash-node": "^4.0.0", "@smithy/hash-stream-node": "^4.0.0", "@smithy/invalid-dependency": "^4.0.0", "@smithy/md5-js": "^4.0.0", "@smithy/middleware-content-length": "^4.0.0", "@smithy/middleware-endpoint": "^4.0.0", "@smithy/middleware-retry": "^4.0.0", "@smithy/middleware-serde": "^4.0.0", "@smithy/middleware-stack": "^4.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/url-parser": "^4.0.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.0", "@smithy/util-defaults-mode-node": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-retry": "^4.0.0", "@smithy/util-stream": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-45RAzBWCR3E2p9Oale1TqIHPxqcbJoNmLDU+z/5kqnLml32Ntkvioe3BRMq+eaSmiFtOyviF1snfuxPUkRrUWA=="],
+ "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.735.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/credential-provider-node": "3.734.0", "@aws-sdk/middleware-bucket-endpoint": "3.734.0", "@aws-sdk/middleware-expect-continue": "3.734.0", "@aws-sdk/middleware-flexible-checksums": "3.735.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-location-constraint": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-sdk-s3": "3.734.0", "@aws-sdk/middleware-ssec": "3.734.0", "@aws-sdk/middleware-user-agent": "3.734.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/signature-v4-multi-region": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.734.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.734.0", "@aws-sdk/xml-builder": "3.734.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.1", "@smithy/eventstream-serde-browser": "^4.0.1", "@smithy/eventstream-serde-config-resolver": "^4.0.1", "@smithy/eventstream-serde-node": "^4.0.1", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-blob-browser": "^4.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/hash-stream-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/md5-js": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.2", "@smithy/middleware-retry": "^4.0.3", "@smithy/middleware-serde": "^4.0.1", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.3", "@smithy/util-defaults-mode-node": "^4.0.3", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "@smithy/util-waiter": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-6NcxX06c4tnnu6FTFiyS8shoYLy+8TvIDkYjJ5r9tvbaysOptUKQdolOuh7+Lz95QyaqiznpCsNTxsfywLXcqw=="],
- "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.730.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/middleware-host-header": "3.723.0", "@aws-sdk/middleware-logger": "3.723.0", "@aws-sdk/middleware-recursion-detection": "3.723.0", "@aws-sdk/middleware-user-agent": "3.730.0", "@aws-sdk/region-config-resolver": "3.723.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-endpoints": "3.730.0", "@aws-sdk/util-user-agent-browser": "3.723.0", "@aws-sdk/util-user-agent-node": "3.730.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/hash-node": "^4.0.0", "@smithy/invalid-dependency": "^4.0.0", "@smithy/middleware-content-length": "^4.0.0", "@smithy/middleware-endpoint": "^4.0.0", "@smithy/middleware-retry": "^4.0.0", "@smithy/middleware-serde": "^4.0.0", "@smithy/middleware-stack": "^4.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/url-parser": "^4.0.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.0", "@smithy/util-defaults-mode-node": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-retry": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-mI8kqkSuVlZklewEmN7jcbBMyVODBld3MsTjCKSl5ztduuPX69JD7nXLnWWPkw1PX4aGTO24AEoRMGNxntoXUg=="],
+ "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.734.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.734.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.734.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.734.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.1", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.2", "@smithy/middleware-retry": "^4.0.3", "@smithy/middleware-serde": "^4.0.1", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.3", "@smithy/util-defaults-mode-node": "^4.0.3", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg=="],
- "@aws-sdk/core": ["@aws-sdk/core@3.730.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/core": "^3.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/signature-v4": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/util-middleware": "^4.0.0", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-jonKyR+2GcqbZj2WDICZS0c633keLc9qwXnePu83DfAoFXMMIMyoR/7FOGf8F3OrIdGh8KzE9VvST+nZCK9EJA=="],
+ "@aws-sdk/core": ["@aws-sdk/core@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/core": "^3.1.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg=="],
- "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-fFXgo3jBXLWqu8I07Hd96mS7RjrtpDgm3bZShm0F3lKtqDQF+hObFWq9A013SOE+RjMLVfbABhToXAYct3FcBw=="],
+ "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw=="],
- "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-1aF3elbCzpVhWLAuV63iFElfLOqLGGTp4fkf2VAFIDO3hjshpXUQssTgIWiBwwtJYJdOSxaFrCU7u8frjr/5aQ=="],
+ "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/property-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg=="],
- "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/credential-provider-env": "3.730.0", "@aws-sdk/credential-provider-http": "3.730.0", "@aws-sdk/credential-provider-process": "3.730.0", "@aws-sdk/credential-provider-sso": "3.730.0", "@aws-sdk/credential-provider-web-identity": "3.730.0", "@aws-sdk/nested-clients": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/credential-provider-imds": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-zwsxkBuQuPp06o45ATAnznHzj3+ibop/EaTytNzSv0O87Q59K/jnS/bdtv1n6bhe99XCieRNTihvtS7YklzK7A=="],
+ "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/credential-provider-env": "3.734.0", "@aws-sdk/credential-provider-http": "3.734.0", "@aws-sdk/credential-provider-process": "3.734.0", "@aws-sdk/credential-provider-sso": "3.734.0", "@aws-sdk/credential-provider-web-identity": "3.734.0", "@aws-sdk/nested-clients": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg=="],
- "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.730.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.730.0", "@aws-sdk/credential-provider-http": "3.730.0", "@aws-sdk/credential-provider-ini": "3.730.0", "@aws-sdk/credential-provider-process": "3.730.0", "@aws-sdk/credential-provider-sso": "3.730.0", "@aws-sdk/credential-provider-web-identity": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/credential-provider-imds": "^4.0.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-ztRjh1edY7ut2wwrj1XqHtqPY/NXEYIk5fYf04KKsp8zBi81ScVqP7C+Cst6PFKixjgLSG6RsqMx9GSAalVv0Q=="],
+ "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.734.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.734.0", "@aws-sdk/credential-provider-http": "3.734.0", "@aws-sdk/credential-provider-ini": "3.734.0", "@aws-sdk/credential-provider-process": "3.734.0", "@aws-sdk/credential-provider-sso": "3.734.0", "@aws-sdk/credential-provider-web-identity": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-9NOSNbkPVb91JwaXOhyfahkzAwWdMsbWHL6fh5/PHlXYpsDjfIfT23I++toepNF2nODAJNLnOEHGYIxgNgf6jQ=="],
- "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-cNKUQ81eptfZN8MlSqwUq3+5ln8u/PcY57UmLZ+npxUHanqO1akpgcpNsLpmsIkoXGbtSQrLuDUgH86lS/SWOw=="],
+ "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw=="],
- "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.730.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.730.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/token-providers": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-SdI2xrTbquJLMxUh5LpSwB8zfiKq3/jso53xWRgrVfeDlrSzZuyV6QghaMs3KEEjcNzwEnTfSIjGQyRXG9VrEw=="],
+ "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.734.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.734.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/token-providers": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q=="],
- "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/nested-clients": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-l5vdPmvF/d890pbvv5g1GZrdjaSQkyPH/Bc8dO/ZqkWxkIP8JNgl48S2zgf4DkP3ik9K2axWO828L5RsMDQzdA=="],
+ "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/nested-clients": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g=="],
- "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.726.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@aws-sdk/util-arn-parser": "3.723.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-vpaP80rZqwu0C3ELayIcRIW84/nd1tadeoqllT+N9TDshuEvq4UJ+w47OBHB7RkHFJoc79lXXNYle0fdQdaE/A=="],
+ "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@aws-sdk/util-arn-parser": "3.723.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ=="],
- "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw=="],
+ "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ=="],
- "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.730.0", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-stream": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-D0YfQWJ32xo3DvFKcTuM5Aq0IxVr8N++ChVeK3ENYcdelUpxWA9xplZH3QTSbbM1iH3qs2maeAAnLyAns26aGg=="],
+ "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.735.0", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-Tx7lYTPwQFRe/wQEHMR6Drh/S+X0ToAEq1Ava9QyxV1riwtepzRLojpNDELFb3YQVVYbX7FEiBMCJLMkmIIY+A=="],
- "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ=="],
+ "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw=="],
- "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw=="],
+ "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg=="],
- "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg=="],
+ "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w=="],
- "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A=="],
+ "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA=="],
- "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-arn-parser": "3.723.0", "@smithy/core": "^3.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/signature-v4": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-stream": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-5EJWF8cV5SWqGQfQWDd1sklawm5grUa6H/QHGAhmCdcw+isz675qg/+c970I5rBsSEky83ialjBQIirrBo7DYQ=="],
+ "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-arn-parser": "3.723.0", "@smithy/core": "^3.1.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-zeZPenDhkP/RXYMFG3exhNOe2Qukg2l2KpIjxq9o66meELiTULoIXjCmgPoWcM8zzrue06SBdTsaJDHfDl2vdA=="],
- "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA=="],
+ "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ=="],
- "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.730.0", "", { "dependencies": { "@aws-sdk/core": "3.730.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-endpoints": "3.730.0", "@smithy/core": "^3.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-aPMZvNmf2a42B41au3bA3ODU4HfHka2nYT/SAIhhVXH1ENYfAmZo7FraFPxetKepFMCtL7j4QE6/LDucK6liIw=="],
+ "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.734.0", "", { "dependencies": { "@aws-sdk/core": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.734.0", "@smithy/core": "^3.1.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg=="],
- "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.730.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.730.0", "@aws-sdk/middleware-host-header": "3.723.0", "@aws-sdk/middleware-logger": "3.723.0", "@aws-sdk/middleware-recursion-detection": "3.723.0", "@aws-sdk/middleware-user-agent": "3.730.0", "@aws-sdk/region-config-resolver": "3.723.0", "@aws-sdk/types": "3.723.0", "@aws-sdk/util-endpoints": "3.730.0", "@aws-sdk/util-user-agent-browser": "3.723.0", "@aws-sdk/util-user-agent-node": "3.730.0", "@smithy/config-resolver": "^4.0.0", "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", "@smithy/hash-node": "^4.0.0", "@smithy/invalid-dependency": "^4.0.0", "@smithy/middleware-content-length": "^4.0.0", "@smithy/middleware-endpoint": "^4.0.0", "@smithy/middleware-retry": "^4.0.0", "@smithy/middleware-serde": "^4.0.0", "@smithy/middleware-stack": "^4.0.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/node-http-handler": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/url-parser": "^4.0.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.0", "@smithy/util-defaults-mode-node": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "@smithy/util-middleware": "^4.0.0", "@smithy/util-retry": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-vilIgf1/7kre8DdE5zAQkDOwHFb/TahMn/6j2RZwFLlK7cDk91r19deSiVYnKQkupDMtOfNceNqnorM4I3PDzw=="],
+ "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.734.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.734.0", "@aws-sdk/middleware-host-header": "3.734.0", "@aws-sdk/middleware-logger": "3.734.0", "@aws-sdk/middleware-recursion-detection": "3.734.0", "@aws-sdk/middleware-user-agent": "3.734.0", "@aws-sdk/region-config-resolver": "3.734.0", "@aws-sdk/types": "3.734.0", "@aws-sdk/util-endpoints": "3.734.0", "@aws-sdk/util-user-agent-browser": "3.734.0", "@aws-sdk/util-user-agent-node": "3.734.0", "@smithy/config-resolver": "^4.0.1", "@smithy/core": "^3.1.1", "@smithy/fetch-http-handler": "^5.0.1", "@smithy/hash-node": "^4.0.1", "@smithy/invalid-dependency": "^4.0.1", "@smithy/middleware-content-length": "^4.0.1", "@smithy/middleware-endpoint": "^4.0.2", "@smithy/middleware-retry": "^4.0.3", "@smithy/middleware-serde": "^4.0.1", "@smithy/middleware-stack": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/node-http-handler": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.3", "@smithy/util-defaults-mode-node": "^4.0.3", "@smithy/util-endpoints": "^3.0.1", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA=="],
- "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg=="],
+ "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ=="],
- "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.730.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/protocol-http": "^5.0.0", "@smithy/signature-v4": "^5.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-/a6ndc+oNnFwolBdB4QgAK7iO4cge0vm9hEp7ZeFQCviX64UmsWH/UdIhsi7wvKEXdIo1XR9v3O4o6UwcQngXg=="],
+ "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.734.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/protocol-http": "^5.0.1", "@smithy/signature-v4": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-GSRP8UH30RIYkcpPILV4pWrKFjRmmNjtUd41HTKWde5GbjJvNYpxqFXw2aIJHjKTw/js3XEtGSNeTaQMVVt3CQ=="],
- "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.730.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/property-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-BSPssGj54B/AABWXARIPOT/1ybFahM1ldlfmXy9gRmZi/afe9geWJGlFYCCt3PmqR+1Ny5XIjSfue+kMd//drQ=="],
+ "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.734.0", "", { "dependencies": { "@aws-sdk/nested-clients": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw=="],
- "@aws-sdk/types": ["@aws-sdk/types@3.723.0", "", { "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA=="],
+ "@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="],
"@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.723.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w=="],
- "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.730.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/types": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", "tslib": "^2.6.2" } }, "sha512-1KTFuVnk+YtLgWr6TwDiggcDqtPpOY2Cszt3r2lkXfaEAX6kHyOZi1vdvxXjPU5LsOBJem8HZ7KlkmrEi+xowg=="],
+ "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "@smithy/util-endpoints": "^3.0.1", "tslib": "^2.6.2" } }, "sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg=="],
- "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.693.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw=="],
+ "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.723.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw=="],
- "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.723.0", "", { "dependencies": { "@aws-sdk/types": "3.723.0", "@smithy/types": "^4.0.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg=="],
+ "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.734.0", "", { "dependencies": { "@aws-sdk/types": "3.734.0", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng=="],
- "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.730.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.730.0", "@aws-sdk/types": "3.723.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-yBvkOAjqsDEl1va4eHNOhnFBk0iCY/DBFNyhvtTMqPF4NO+MITWpFs3J9JtZKzJlQ6x0Yb9TLQ8NhDjEISz5Ug=="],
+ "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.734.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.734.0", "@aws-sdk/types": "3.734.0", "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA=="],
- "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.723.0", "", { "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-5xK2SqGU1mzzsOeemy7cy3fGKxR1sEpUs4pEiIjaT0OIvU+fZaDVUEYWOqsgns6wI90XZEQJlXtI8uAHX/do5Q=="],
+ "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ=="],
"@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="],
@@ -238,9 +237,9 @@
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
- "@babel/parser": ["@babel/parser@7.26.3", "", { "dependencies": { "@babel/types": "^7.26.3" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA=="],
+ "@babel/parser": ["@babel/parser@7.26.7", "", { "dependencies": { "@babel/types": "^7.26.7" }, "bin": "./bin/babel-parser.js" }, "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w=="],
- "@babel/types": ["@babel/types@7.26.3", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA=="],
+ "@babel/types": ["@babel/types@7.26.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg=="],
"@badgateway/oauth2-client": ["@badgateway/oauth2-client@2.4.2", "", {}, "sha512-70Fmzlmn8EfCjjssls8N6E94quBUWnLhu4inPZU2pkwpc6ZvbErkLRvtkYl81KFCvVcuVC0X10QPZVNwjXo2KA=="],
@@ -262,8 +261,6 @@
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="],
- "@bradenmacdonald/s3-lite-client": ["@jsr/bradenmacdonald__s3-lite-client@0.8.0", "https://npm.jsr.io/~/11/@jsr/bradenmacdonald__s3-lite-client/0.8.0.tgz", {}, "sha512-q4n9/bqDPdNVOnljSOY0eVKHz1WpRAuJebPIpl2YH4iWSaSduxKJBucnomEEgfEMM5zA0ohRd2biWCwB53QaBg=="],
-
"@bull-board/api": ["@bull-board/api@6.7.1", "", { "dependencies": { "redis-info": "^3.0.8" }, "peerDependencies": { "@bull-board/ui": "6.7.1" } }, "sha512-Gv+0jo0QYBjNE0DatcUSavMLfGAOuhsLVPxJHR3QjN7Rp0s1VM/O2ExNTezDip1Q67G8fq8Tp9ZfleJZb1KP2Q=="],
"@bull-board/hono": ["@bull-board/hono@6.7.1", "", { "dependencies": { "@bull-board/api": "6.7.1", "@bull-board/ui": "6.7.1", "ejs": "^3.1.10", "hono": "^4.6.11" } }, "sha512-Wmzt/QPcjzaThCJoHKPcHId0PUqDVGdZnsrYiE4nwKv0DGc1mn6QwKrwS8iqu6YM3wPRKWLUGPEDiAmJM+i+Zg=="],
@@ -340,7 +337,7 @@
"@hono/zod-validator": ["@hono/zod-validator@0.4.2", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.19.1" } }, "sha512-1rrlBg+EpDPhzOV4hT9pxr5+xDVmKuz6YJl+la7VCwK6ass5ldyKm5fD+umJdV2zhHD6jROoCCv8NbTwyfhT0g=="],
- "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.21", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-aqbIuVshMZ2fNEhm25//9DoKudboXF3CpoEQJJlHl9gVSVNOTr4cgaCIZvgSEYmys2HHEfmhcpoZIhoEFZS8SQ=="],
+ "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.22", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-0UzThRMwHuOJfgpp+tyV/y2uEBLjFVrxC4igv9iWjSEQEBK4tNjWZNTRCBCYyv/FwWVYyKAsA8tZQ8vUYzvFnw=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
@@ -382,29 +379,29 @@
"@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="],
- "@inquirer/checkbox": ["@inquirer/checkbox@4.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg=="],
+ "@inquirer/checkbox": ["@inquirer/checkbox@4.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-PgP35JfmGjHU0LSXOyRew0zHuA9N6OJwOlos1fZ20b7j8ISeAdib3L+n0jIxBtX958UeEpte6xhG/gxJ5iUqMw=="],
"@inquirer/confirm": ["@inquirer/confirm@5.1.3", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-fuF9laMmHoOgWapF9h9hv6opA5WvmGFHsTYGCmuFxcghIhEhb3dN0CdQR4BUMqa2H506NCj8cGX4jwMsE4t6dA=="],
"@inquirer/core": ["@inquirer/core@10.1.4", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-5y4/PUJVnRb4bwWY67KLdebWOhOc7xj5IP2J80oWXa64mVag24rwQ1VAdnj7/eDY/odhguW0zQ1Mp1pj6fO/2w=="],
- "@inquirer/editor": ["@inquirer/editor@4.2.1", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2", "external-editor": "^3.1.0" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA=="],
+ "@inquirer/editor": ["@inquirer/editor@4.2.3", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2", "external-editor": "^3.1.0" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-S9KnIOJuTZpb9upeRSBBhoDZv7aSV3pG9TECrBj0f+ZsFwccz886hzKBrChGrXMJwd4NKY+pOA9Vy72uqnd6Eg=="],
- "@inquirer/expand": ["@inquirer/expand@4.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg=="],
+ "@inquirer/expand": ["@inquirer/expand@4.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-TRTfi1mv1GeIZGyi9PQmvAaH65ZlG4/FACq6wSzs7Vvf1z5dnNWsAAXBjWMHt76l+1hUY8teIqJFrWBk5N6gsg=="],
- "@inquirer/figures": ["@inquirer/figures@1.0.8", "", {}, "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg=="],
+ "@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
"@inquirer/input": ["@inquirer/input@4.1.3", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-zeo++6f7hxaEe7OjtMzdGZPHiawsfmCZxWB9X1NpmYgbeoyerIbWemvlBxxl+sQIlHC0WuSAG19ibMq3gbhaqQ=="],
- "@inquirer/number": ["@inquirer/number@3.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA=="],
+ "@inquirer/number": ["@inquirer/number@3.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-xO07lftUHk1rs1gR0KbqB+LJPhkUNkyzV/KhH+937hdkMazmAYHLm1OIrNKpPelppeV1FgWrgFDjdUD8mM+XUg=="],
- "@inquirer/password": ["@inquirer/password@4.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w=="],
+ "@inquirer/password": ["@inquirer/password@4.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-QLF0HmMpHZPPMp10WGXh6F+ZPvzWE7LX6rNoccdktv/Rov0B+0f+eyXkAcgqy5cH9V+WSpbLxu2lo3ysEVK91w=="],
- "@inquirer/prompts": ["@inquirer/prompts@7.2.1", "", { "dependencies": { "@inquirer/checkbox": "^4.0.4", "@inquirer/confirm": "^5.1.1", "@inquirer/editor": "^4.2.1", "@inquirer/expand": "^4.0.4", "@inquirer/input": "^4.1.1", "@inquirer/number": "^3.0.4", "@inquirer/password": "^4.0.4", "@inquirer/rawlist": "^4.0.4", "@inquirer/search": "^3.0.4", "@inquirer/select": "^4.0.4" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ=="],
+ "@inquirer/prompts": ["@inquirer/prompts@7.2.3", "", { "dependencies": { "@inquirer/checkbox": "^4.0.6", "@inquirer/confirm": "^5.1.3", "@inquirer/editor": "^4.2.3", "@inquirer/expand": "^4.0.6", "@inquirer/input": "^4.1.3", "@inquirer/number": "^3.0.6", "@inquirer/password": "^4.0.6", "@inquirer/rawlist": "^4.0.6", "@inquirer/search": "^3.0.6", "@inquirer/select": "^4.0.6" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-hzfnm3uOoDySDXfDNOm9usOuYIaQvTgKp/13l1uJoe6UNY+Zpcn2RYt0jXz3yA+yemGHvDOxVzqWl3S5sQq53Q=="],
- "@inquirer/rawlist": ["@inquirer/rawlist@4.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg=="],
+ "@inquirer/rawlist": ["@inquirer/rawlist@4.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-QoE4s1SsIPx27FO4L1b1mUjVcoHm1pWE/oCmm4z/Hl+V1Aw5IXl8FYYzGmfXaBT0l/sWr49XmNSiq7kg3Kd/Lg=="],
- "@inquirer/search": ["@inquirer/search@3.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A=="],
+ "@inquirer/search": ["@inquirer/search@3.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-eFZ2hiAq0bZcFPuFFBmZEtXU1EarHLigE+ENCtpO+37NHCl4+Yokq1P/d09kUblObaikwfo97w+0FtG/EXl5Ng=="],
"@inquirer/select": ["@inquirer/select@2.5.0", "", { "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/figures": "^1.0.5", "@inquirer/type": "^1.5.3", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" } }, "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA=="],
@@ -442,19 +439,19 @@
"@oclif/core": ["@oclif/core@4.2.4", "", { "dependencies": { "ansi-escapes": "^4.3.2", "ansis": "^3.9.0", "clean-stack": "^3.0.1", "cli-spinners": "^2.9.2", "debug": "^4.4.0", "ejs": "^3.1.10", "get-package-type": "^0.1.0", "globby": "^11.1.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", "lilconfig": "^3.1.3", "minimatch": "^9.0.5", "semver": "^7.6.3", "string-width": "^4.2.3", "supports-color": "^8", "widest-line": "^3.1.0", "wordwrap": "^1.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-JDqdhX6fBbijY3ouubfmX7yFBXy95YSpiAVk0TAaXXCoSqoo/2WMcV2Ufv2V+8zriafPU/rvKgI+ZE07/7HwfQ=="],
- "@oclif/plugin-help": ["@oclif/plugin-help@6.2.21", "", { "dependencies": { "@oclif/core": "^4" } }, "sha512-nUAnIR96QJvAAFzdJoq9iqInuwY9nxURNaAiGWGUtW5HgrwJOmoY1LqcobkzW89RH3NONtdWmc74sIupWmLtNw=="],
+ "@oclif/plugin-help": ["@oclif/plugin-help@6.2.23", "", { "dependencies": { "@oclif/core": "^4" } }, "sha512-BA0h1fbheN74cdrITKIwqfsRtnw/G+oysHbn+IsqWcsecgy5HZwI37/cCRLXZSZQndsgoYAhqvVpyleXv3g83A=="],
- "@oclif/plugin-not-found": ["@oclif/plugin-not-found@3.2.33", "", { "dependencies": { "@inquirer/prompts": "^7.2.1", "@oclif/core": "^4", "ansis": "^3.5.2", "fast-levenshtein": "^3.0.0" } }, "sha512-1RgvZ0J5KloU8TRemHxCr5MbVtr41ungnz8BBCPJn2yR5L+Eo2Lt+kpOyEeYAohjo4Tml1AHSmipUF4jKThwTw=="],
+ "@oclif/plugin-not-found": ["@oclif/plugin-not-found@3.2.38", "", { "dependencies": { "@inquirer/prompts": "^7.2.3", "@oclif/core": "^4", "ansis": "^3.8.1", "fast-levenshtein": "^3.0.0" } }, "sha512-04jklrnR2gszbMrSpM9Dwv5RNx05eo8+d7goNbvWbbj7UxDT3RZrjAEYtYuu8ng7pRVFQO7fX4+eVnFbpuCPMg=="],
- "@oclif/plugin-warn-if-update-available": ["@oclif/plugin-warn-if-update-available@3.1.30", "", { "dependencies": { "@oclif/core": "^4", "ansis": "^3.5.2", "debug": "^4.4.0", "http-call": "^5.2.2", "lodash": "^4.17.21", "registry-auth-token": "^5.0.3" } }, "sha512-mluHDyIraM8T0Je25npNwV0p8T2cudeTe1N6P6KQ2rgPpgcW59Z+vze0VSJcZ7f+S65M3mk0TXn3qj7gtS3PLA=="],
+ "@oclif/plugin-warn-if-update-available": ["@oclif/plugin-warn-if-update-available@3.1.31", "", { "dependencies": { "@oclif/core": "^4", "ansis": "^3.5.2", "debug": "^4.4.0", "http-call": "^5.2.2", "lodash": "^4.17.21", "registry-auth-token": "^5.0.3" } }, "sha512-0ZN7o+Tv00gYrwlKsfMQ8VvJGb9Vhr3UYStFJh1AbEdGTPlURv51aatTW27AIV2atfluCh0MMntVZSzoDcuxSQ=="],
"@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
"@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.56.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g=="],
- "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g=="],
+ "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="],
- "@opentelemetry/core": ["@opentelemetry/core@1.30.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA=="],
+ "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="],
"@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.56.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.56.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w=="],
@@ -508,9 +505,9 @@
"@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.36.2", "", {}, "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g=="],
- "@opentelemetry/resources": ["@opentelemetry/resources@1.30.0", "", { "dependencies": { "@opentelemetry/core": "1.30.0", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5mGMjL0Uld/99t7/pcd7CuVtJbkARckLVuiOX84nO8RtLtIz0/J6EOHM2TGvPZ6F4K+XjUq13gMx14w80SVCQg=="],
+ "@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="],
- "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.30.0", "", { "dependencies": { "@opentelemetry/core": "1.30.0", "@opentelemetry/resources": "1.30.0", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg=="],
+ "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg=="],
"@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="],
@@ -526,53 +523,53 @@
"@prisma/instrumentation": ["@prisma/instrumentation@5.22.0", "", { "dependencies": { "@opentelemetry/api": "^1.8", "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0 || ^0.53.0", "@opentelemetry/sdk-trace-base": "^1.22" } }, "sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q=="],
- "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ=="],
+ "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.32.1", "", { "os": "android", "cpu": "arm" }, "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA=="],
- "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA=="],
+ "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.32.1", "", { "os": "android", "cpu": "arm64" }, "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q=="],
- "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ=="],
+ "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.32.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA=="],
- "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ=="],
+ "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.32.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q=="],
- "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA=="],
+ "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.32.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA=="],
- "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ=="],
+ "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.32.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw=="],
- "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA=="],
+ "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.32.1", "", { "os": "linux", "cpu": "arm" }, "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g=="],
- "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg=="],
+ "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.32.1", "", { "os": "linux", "cpu": "arm" }, "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q=="],
- "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA=="],
+ "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.32.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw=="],
- "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A=="],
+ "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.32.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw=="],
- "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA=="],
+ "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.32.1", "", { "os": "linux", "cpu": "none" }, "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw=="],
- "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A=="],
+ "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.32.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg=="],
- "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA=="],
+ "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.32.1", "", { "os": "linux", "cpu": "none" }, "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g=="],
- "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg=="],
+ "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.32.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ=="],
- "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw=="],
+ "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.32.1", "", { "os": "linux", "cpu": "x64" }, "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg=="],
- "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g=="],
+ "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.32.1", "", { "os": "linux", "cpu": "x64" }, "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA=="],
- "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A=="],
+ "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.32.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ=="],
- "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA=="],
+ "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.32.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ=="],
- "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA=="],
+ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.32.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q=="],
"@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="],
- "@sentry/bun": ["@sentry/bun@8.51.0", "", { "dependencies": { "@sentry/core": "8.51.0", "@sentry/node": "8.51.0", "@sentry/opentelemetry": "8.51.0" } }, "sha512-gYgRnIW7oziFsrvWKQDmiCbGEKko4AvmALa/hP34OnPwsFLUT8ukA0JY3DZJcVyQplwHyK8XZnKkg7OgK+H5gA=="],
+ "@sentry/bun": ["@sentry/bun@8.52.0", "", { "dependencies": { "@sentry/core": "8.52.0", "@sentry/node": "8.52.0", "@sentry/opentelemetry": "8.52.0" } }, "sha512-LGEce1ie/PHZxL8yYTsAgtfmd/ZqedoIxp1NwfGkPl+kDsgp5BKcwiXgna/su65ITDLmC6uzvNyMwE5ufXALiQ=="],
- "@sentry/core": ["@sentry/core@8.51.0", "", {}, "sha512-Go0KxCYLw+OBIlLSv5YsYX+x9NW43fNVcyB6rhkSp2Q5Zme3tAE6KtZFvyu4SO7G/903wisW5Q6qV6UuK/ee4A=="],
+ "@sentry/core": ["@sentry/core@8.52.0", "", {}, "sha512-2j3B7IKmseTKFm6AyheJ+RSgXqIsx+3blFSuxpkdvsEt60Lbzva2uDkCENfBDOclioo1kvHgsyuXLfWW4A+wwA=="],
- "@sentry/node": ["@sentry/node@8.51.0", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.29.0", "@opentelemetry/core": "^1.29.0", "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/instrumentation-amqplib": "^0.45.0", "@opentelemetry/instrumentation-connect": "0.42.0", "@opentelemetry/instrumentation-dataloader": "0.15.0", "@opentelemetry/instrumentation-express": "0.46.0", "@opentelemetry/instrumentation-fastify": "0.43.0", "@opentelemetry/instrumentation-fs": "0.18.0", "@opentelemetry/instrumentation-generic-pool": "0.42.0", "@opentelemetry/instrumentation-graphql": "0.46.0", "@opentelemetry/instrumentation-hapi": "0.44.0", "@opentelemetry/instrumentation-http": "0.56.0", "@opentelemetry/instrumentation-ioredis": "0.46.0", "@opentelemetry/instrumentation-kafkajs": "0.6.0", "@opentelemetry/instrumentation-knex": "0.43.0", "@opentelemetry/instrumentation-koa": "0.46.0", "@opentelemetry/instrumentation-lru-memoizer": "0.43.0", "@opentelemetry/instrumentation-mongodb": "0.50.0", "@opentelemetry/instrumentation-mongoose": "0.45.0", "@opentelemetry/instrumentation-mysql": "0.44.0", "@opentelemetry/instrumentation-mysql2": "0.44.0", "@opentelemetry/instrumentation-nestjs-core": "0.43.0", "@opentelemetry/instrumentation-pg": "0.49.0", "@opentelemetry/instrumentation-redis-4": "0.45.0", "@opentelemetry/instrumentation-tedious": "0.17.0", "@opentelemetry/instrumentation-undici": "0.9.0", "@opentelemetry/resources": "^1.29.0", "@opentelemetry/sdk-trace-base": "^1.29.0", "@opentelemetry/semantic-conventions": "^1.28.0", "@prisma/instrumentation": "5.22.0", "@sentry/core": "8.51.0", "@sentry/opentelemetry": "8.51.0", "import-in-the-middle": "^1.11.2" } }, "sha512-KfXk3QaeNXmJgUUCDAwZW7cdZ+1GvRXNdTPLpWbAKGaNulAeimck5fGGL8FRMSF0sMz6BT6Ku7u6DUaZTtbB7w=="],
+ "@sentry/node": ["@sentry/node@8.52.0", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.29.0", "@opentelemetry/core": "^1.29.0", "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/instrumentation-amqplib": "^0.45.0", "@opentelemetry/instrumentation-connect": "0.42.0", "@opentelemetry/instrumentation-dataloader": "0.15.0", "@opentelemetry/instrumentation-express": "0.46.0", "@opentelemetry/instrumentation-fastify": "0.43.0", "@opentelemetry/instrumentation-fs": "0.18.0", "@opentelemetry/instrumentation-generic-pool": "0.42.0", "@opentelemetry/instrumentation-graphql": "0.46.0", "@opentelemetry/instrumentation-hapi": "0.44.0", "@opentelemetry/instrumentation-http": "0.56.0", "@opentelemetry/instrumentation-ioredis": "0.46.0", "@opentelemetry/instrumentation-kafkajs": "0.6.0", "@opentelemetry/instrumentation-knex": "0.43.0", "@opentelemetry/instrumentation-koa": "0.46.0", "@opentelemetry/instrumentation-lru-memoizer": "0.43.0", "@opentelemetry/instrumentation-mongodb": "0.50.0", "@opentelemetry/instrumentation-mongoose": "0.45.0", "@opentelemetry/instrumentation-mysql": "0.44.0", "@opentelemetry/instrumentation-mysql2": "0.44.0", "@opentelemetry/instrumentation-nestjs-core": "0.43.0", "@opentelemetry/instrumentation-pg": "0.49.0", "@opentelemetry/instrumentation-redis-4": "0.45.0", "@opentelemetry/instrumentation-tedious": "0.17.0", "@opentelemetry/instrumentation-undici": "0.9.0", "@opentelemetry/resources": "^1.29.0", "@opentelemetry/sdk-trace-base": "^1.29.0", "@opentelemetry/semantic-conventions": "^1.28.0", "@prisma/instrumentation": "5.22.0", "@sentry/core": "8.52.0", "@sentry/opentelemetry": "8.52.0", "import-in-the-middle": "^1.11.2" } }, "sha512-k+GuWbLDcqIS766zF+TvVRnfbshNy6XKRd+HRNIEaeYa9Tm4LH/ZgCxz39AhFAQGWlZUHm/G2KkCt3AvgswJEg=="],
- "@sentry/opentelemetry": ["@sentry/opentelemetry@8.51.0", "", { "dependencies": { "@sentry/core": "8.51.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.29.0", "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/sdk-trace-base": "^1.29.0", "@opentelemetry/semantic-conventions": "^1.28.0" } }, "sha512-SvH/rl/P+S7EKXIZA6kq2HzFYfXKQx8Ytgx4WZJV+katsdaDay24QtycYE+PaqbotAkV6MOMECEb8a9XXttQcg=="],
+ "@sentry/opentelemetry": ["@sentry/opentelemetry@8.52.0", "", { "dependencies": { "@sentry/core": "8.52.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.29.0", "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/sdk-trace-base": "^1.29.0", "@opentelemetry/semantic-conventions": "^1.28.0" } }, "sha512-NbGPsCZmXQW/B2wlgIjeIn9bCsNKhZGenB0DLK8ZIS/eDOI0JRBjHWMpLS9H9Q0xqgFBjyp+Gwyu3nEZcN4lXw=="],
"@shikijs/core": ["@shikijs/core@2.1.0", "", { "dependencies": { "@shikijs/engine-javascript": "2.1.0", "@shikijs/engine-oniguruma": "2.1.0", "@shikijs/types": "2.1.0", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA=="],
@@ -600,7 +597,7 @@
"@smithy/config-resolver": ["@smithy/config-resolver@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ=="],
- "@smithy/core": ["@smithy/core@3.1.1", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-hhUZlBWYuh9t6ycAcN90XOyG76C1AzwxZZgaCVPMYpWqqk9uMFo7HGG5Zu2cEhCJn7DdOi5krBmlibWWWPgdsw=="],
+ "@smithy/core": ["@smithy/core@3.1.2", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.2", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-stream": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q=="],
"@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg=="],
@@ -630,11 +627,11 @@
"@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.1", "", { "dependencies": { "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ=="],
- "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.0.2", "", { "dependencies": { "@smithy/core": "^3.1.1", "@smithy/middleware-serde": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-Z9m67CXizGpj8CF/AW/7uHqYNh1VXXOn9Ap54fenWsCa0HnT4cJuE61zqG3cBkTZJDCy0wHJphilI41co/PE5g=="],
+ "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.0.3", "", { "dependencies": { "@smithy/core": "^3.1.2", "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/url-parser": "^4.0.1", "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" } }, "sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q=="],
- "@smithy/middleware-retry": ["@smithy/middleware-retry@4.0.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/service-error-classification": "^4.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-TiKwwQTwUDeDtwWW8UWURTqu7s6F3wN2pmziLU215u7bqpVT9Mk2oEvURjpRLA+5XeQhM68R5BpAGzVtomsqgA=="],
+ "@smithy/middleware-retry": ["@smithy/middleware-retry@4.0.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/service-error-classification": "^4.0.1", "@smithy/smithy-client": "^4.1.3", "@smithy/types": "^4.1.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ=="],
- "@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA=="],
+ "@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.2", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ=="],
"@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA=="],
@@ -656,7 +653,7 @@
"@smithy/signature-v4": ["@smithy/signature-v4@5.0.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA=="],
- "@smithy/smithy-client": ["@smithy/smithy-client@4.1.2", "", { "dependencies": { "@smithy/core": "^3.1.1", "@smithy/middleware-endpoint": "^4.0.2", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-0yApeHWBqocelHGK22UivZyShNxFbDNrgREBllGh5Ws0D0rg/yId/CJfeoKKpjbfY2ju8j6WgDUGZHYQmINZ5w=="],
+ "@smithy/smithy-client": ["@smithy/smithy-client@4.1.3", "", { "dependencies": { "@smithy/core": "^3.1.2", "@smithy/middleware-endpoint": "^4.0.3", "@smithy/middleware-stack": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/types": "^4.1.0", "@smithy/util-stream": "^4.0.2", "tslib": "^2.6.2" } }, "sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A=="],
"@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="],
@@ -672,9 +669,9 @@
"@smithy/util-config-provider": ["@smithy/util-config-provider@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w=="],
- "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.3", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7c5SF1fVK0EOs+2EOf72/qF199zwJflU1d02AevwKbAUPUZyE9RUZiyJxeUmhVxfKDWdUKaaVojNiaDQgnHL9g=="],
+ "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.4", "", { "dependencies": { "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.3", "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw=="],
- "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.3", "", { "dependencies": { "@smithy/config-resolver": "^4.0.1", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.2", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-CVnD42qYD3JKgDlImZ9+On+MqJHzq9uJgPbMdeBE8c2x8VJ2kf2R3XO/yVFx+30ts5lD/GlL0eFIShY3x9ROgQ=="],
+ "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.4", "", { "dependencies": { "@smithy/config-resolver": "^4.0.1", "@smithy/credential-provider-imds": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "@smithy/property-provider": "^4.0.1", "@smithy/smithy-client": "^4.1.3", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw=="],
"@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA=="],
@@ -700,7 +697,7 @@
"@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="],
- "@types/bun": ["@types/bun@1.2.0", "", { "dependencies": { "bun-types": "1.2.0" } }, "sha512-5N1JqdahfpBlAv4wy6svEYcd/YfO2GNrbL95JOmFx8nkE6dbK4R0oSE5SpBA4vBRqgrOUAXF8Dpiz+gi7r80SA=="],
+ "@types/bun": ["@types/bun@1.2.1", "", { "dependencies": { "bun-types": "1.2.1" } }, "sha512-iiCeMAKMkft8EPQJxSbpVRD0DKqrh91w40zunNajce3nMNNFd/LnAquVisSZC+UpTMjDwtcdyzbWct08IvEqRA=="],
"@types/cli-progress": ["@types/cli-progress@3.11.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA=="],
@@ -734,11 +731,11 @@
"@types/mysql": ["@types/mysql@2.15.26", "", { "dependencies": { "@types/node": "*" } }, "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ=="],
- "@types/node": ["@types/node@22.10.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ=="],
+ "@types/node": ["@types/node@22.12.0", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA=="],
"@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="],
- "@types/pg": ["@types/pg@8.11.10", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg=="],
+ "@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="],
"@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="],
@@ -756,11 +753,11 @@
"@types/wrap-ansi": ["@types/wrap-ansi@3.0.0", "", {}, "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g=="],
- "@types/ws": ["@types/ws@8.5.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA=="],
+ "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
"@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="],
- "@ungap/structured-clone": ["@ungap/structured-clone@1.2.1", "", {}, "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA=="],
+ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
"@versia/client": ["@versia/client@0.1.5", "", { "dependencies": { "@badgateway/oauth2-client": "^2.4.2", "zod": "^3.24.1" } }, "sha512-POD2/IT98EZZ32kWEPc3XUY2zApX94tuBftNWIMyoT04Sp7CPuvv1TT2fxM2kmgrC6kgbh4I6yirPpzVY+FpSA=="],
@@ -778,11 +775,11 @@
"@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
- "@vue/devtools-api": ["@vue/devtools-api@7.7.0", "", { "dependencies": { "@vue/devtools-kit": "^7.7.0" } }, "sha512-bHEv6kT85BHtyGgDhE07bAUMAy7zpv6nnR004nSTd0wWMrAOtcrYoXO5iyr20Hkf5jR8obQOfS3byW+I3l2CCA=="],
+ "@vue/devtools-api": ["@vue/devtools-api@7.7.1", "", { "dependencies": { "@vue/devtools-kit": "^7.7.1" } }, "sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg=="],
- "@vue/devtools-kit": ["@vue/devtools-kit@7.7.0", "", { "dependencies": { "@vue/devtools-shared": "^7.7.0", "birpc": "^0.2.19", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.1" } }, "sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA=="],
+ "@vue/devtools-kit": ["@vue/devtools-kit@7.7.1", "", { "dependencies": { "@vue/devtools-shared": "^7.7.1", "birpc": "^0.2.19", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.1" } }, "sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w=="],
- "@vue/devtools-shared": ["@vue/devtools-shared@7.7.0", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ=="],
+ "@vue/devtools-shared": ["@vue/devtools-shared@7.7.1", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA=="],
"@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
@@ -810,7 +807,7 @@
"ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
- "algoliasearch": ["algoliasearch@5.18.0", "", { "dependencies": { "@algolia/client-abtesting": "5.18.0", "@algolia/client-analytics": "5.18.0", "@algolia/client-common": "5.18.0", "@algolia/client-insights": "5.18.0", "@algolia/client-personalization": "5.18.0", "@algolia/client-query-suggestions": "5.18.0", "@algolia/client-search": "5.18.0", "@algolia/ingestion": "1.18.0", "@algolia/monitoring": "1.18.0", "@algolia/recommend": "5.18.0", "@algolia/requester-browser-xhr": "5.18.0", "@algolia/requester-fetch": "5.18.0", "@algolia/requester-node-http": "5.18.0" } }, "sha512-/tfpK2A4FpS0o+S78o3YSdlqXr0MavJIDlFK3XZrlXLy7vaRXJvW5jYg3v5e/wCaF8y0IpMjkYLhoV6QqfpOgw=="],
+ "algoliasearch": ["algoliasearch@5.20.0", "", { "dependencies": { "@algolia/client-abtesting": "5.20.0", "@algolia/client-analytics": "5.20.0", "@algolia/client-common": "5.20.0", "@algolia/client-insights": "5.20.0", "@algolia/client-personalization": "5.20.0", "@algolia/client-query-suggestions": "5.20.0", "@algolia/client-search": "5.20.0", "@algolia/ingestion": "1.20.0", "@algolia/monitoring": "1.20.0", "@algolia/recommend": "5.20.0", "@algolia/requester-browser-xhr": "5.20.0", "@algolia/requester-fetch": "5.20.0", "@algolia/requester-node-http": "5.20.0" } }, "sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ=="],
"altcha-lib": ["altcha-lib@1.2.0", "", {}, "sha512-S5WF8QLNRaM1hvK24XPhOLfu9is2EBCvH7+nv50sM5CaIdUCqQCd0WV/qm/ZZFGTdSoKLuDp+IapZxBLvC+SNg=="],
@@ -822,7 +819,7 @@
"ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
- "ansis": ["ansis@3.9.0", "", {}, "sha512-PcDrVe15ldexeZMsVLBAzBwF2KhZgaU0R+CHxH+x5kqn/pO+UWVBZJ+NEXMPpEOLUFeNsnNdoWYc2gwO+MVkDg=="],
+ "ansis": ["ansis@3.10.0", "", {}, "sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA=="],
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
@@ -860,9 +857,9 @@
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
- "bullmq": ["bullmq@5.35.1", "", { "dependencies": { "cron-parser": "^4.9.0", "ioredis": "^5.4.1", "msgpackr": "^1.11.2", "node-abort-controller": "^3.1.1", "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^9.0.0" } }, "sha512-LnzqisWyF4V8KhgFnK7iaJdQn9Q61EdHdCT6sVTzA3jZr6CHxw/OBmBZhzA8Xq4bsvsmvdjr8pmGftC78aWgXQ=="],
+ "bullmq": ["bullmq@5.38.0", "", { "dependencies": { "cron-parser": "^4.9.0", "ioredis": "^5.4.1", "msgpackr": "^1.11.2", "node-abort-controller": "^3.1.1", "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^9.0.0" } }, "sha512-X6ApLQlSmX0LQ58xCpCoXE2nN57y8H9LD4EApJl9+8E6+FNWdKy6gykL8ofB9x4TcZeeGJhZOUZJAuhRV721bw=="],
- "bun-types": ["bun-types@1.2.0", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-KEaJxyZfbV/c4eyG0vyehDpYmBGreNiQbZIqvVHJwZ4BmeuWlNZ7EAzMN2Zcd7ailmS/tGVW0BgYbGf+lGEpWw=="],
+ "bun-types": ["bun-types@1.2.1", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-p7bmXUWmrPWxhcbFVk7oUXM5jAGt94URaoa3qf4mz43MEhNAo/ot1urzBqctgvuq7y9YxkuN51u+/qm4BiIsHw=="],
"c12": ["c12@2.0.1", "", { "dependencies": { "chokidar": "^4.0.1", "confbox": "^0.1.7", "defu": "^6.1.4", "dotenv": "^16.4.5", "giget": "^1.2.3", "jiti": "^2.3.0", "mlly": "^1.7.1", "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", "pkg-types": "^1.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A=="],
@@ -896,7 +893,7 @@
"cheerio-select": ["cheerio-select@1.6.0", "", { "dependencies": { "css-select": "^4.3.0", "css-what": "^6.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.3.1", "domutils": "^2.8.0" } }, "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g=="],
- "chokidar": ["chokidar@4.0.2", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-/b57FK+bblSU+dfewfFe0rT1YjVDfOmeLQwCAuC+vwvgLkXboATqqmy+Ipux6JrF6L5joe5CBnFOw+gLWH6yKg=="],
+ "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
"chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="],
@@ -940,7 +937,7 @@
"config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="],
- "consola": ["consola@3.2.3", "", {}, "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ=="],
+ "consola": ["consola@3.4.0", "", {}, "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA=="],
"constant-case": ["constant-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", "upper-case": "^2.0.2" } }, "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ=="],
@@ -994,15 +991,15 @@
"domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
- "domutils": ["domutils@3.1.0", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA=="],
+ "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
"dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="],
"dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="],
- "drizzle-kit": ["drizzle-kit@0.30.2", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-vhdLrxWA32WNVF77NabpSnX7pQBornx64VDQDmKddRonOB2Xe/yY4glQ7rECoa+ogqcQNo7VblLUbeBK6Zn9Ow=="],
+ "drizzle-kit": ["drizzle-kit@0.30.3", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-kT8sgyC2hZrtOh5okhEBiwgx8jx+EjLUFoANFVVkBbxIjcb8XjaUorZ0rwCEUEd7THclI3ZARR64pmxloMW3Aw=="],
- "drizzle-orm": ["drizzle-orm@0.38.4", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/react": ">=18", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "react": ">=18", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/react", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "knex", "kysely", "mysql2", "pg", "postgres", "react", "sql.js", "sqlite3"] }, "sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q=="],
+ "drizzle-orm": ["drizzle-orm@0.39.0", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/react": ">=18", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "react": ">=18", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/react", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "knex", "kysely", "mysql2", "pg", "postgres", "react", "sql.js", "sqlite3"] }, "sha512-kkZwo3Jvht0fdJD/EWGx0vYcEK0xnGrlNVaY07QYluRZA9N21B9VFbY+54bnb/1xvyzcg97tE65xprSAP/fFGQ=="],
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
@@ -1026,7 +1023,7 @@
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
- "es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="],
+ "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
"esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="],
@@ -1042,8 +1039,6 @@
"estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
- "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="],
-
"extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="],
"external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="],
@@ -1052,21 +1047,21 @@
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
- "fast-glob": ["fast-glob@3.3.2", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow=="],
+ "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
"fast-levenshtein": ["fast-levenshtein@3.0.0", "", { "dependencies": { "fastest-levenshtein": "^1.0.7" } }, "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ=="],
- "fast-uri": ["fast-uri@3.0.3", "", {}, "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw=="],
+ "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="],
"fast-xml-parser": ["fast-xml-parser@4.4.1", "", { "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw=="],
"fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", {}, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="],
- "fastq": ["fastq@1.17.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="],
+ "fastq": ["fastq@1.18.0", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw=="],
"fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="],
- "fdir": ["fdir@6.4.2", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ=="],
+ "fdir": ["fdir@6.4.3", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw=="],
"filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="],
@@ -1092,17 +1087,19 @@
"get-east-asian-width": ["get-east-asian-width@1.3.0", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="],
- "get-intrinsic": ["get-intrinsic@1.2.6", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.0.0" } }, "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA=="],
+ "get-intrinsic": ["get-intrinsic@1.2.7", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA=="],
"get-package-type": ["get-package-type@0.1.0", "", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="],
+ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
+
"get-stdin": ["get-stdin@9.0.0", "", {}, "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA=="],
"get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
- "get-tsconfig": ["get-tsconfig@4.8.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg=="],
+ "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="],
- "giget": ["giget@1.2.3", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.2.3", "defu": "^6.1.4", "node-fetch-native": "^1.6.3", "nypm": "^0.3.8", "ohash": "^1.1.3", "pathe": "^1.1.2", "tar": "^6.2.0" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA=="],
+ "giget": ["giget@1.2.4", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.5.1", "ohash": "^1.1.4", "pathe": "^2.0.2", "tar": "^6.2.1" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-Wv+daGyispVoA31TrWAVR+aAdP7roubTPEM/8JzRnqXhLbdJH0T9eQyXVFF8fjk3WKTsctII6QcyxILYgNp2DA=="],
"git-hooks-list": ["git-hooks-list@3.1.0", "", {}, "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA=="],
@@ -1134,7 +1131,7 @@
"header-case": ["header-case@2.0.4", "", { "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" } }, "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q=="],
- "hono": ["hono@4.6.18", "", {}, "sha512-Fu7hEPvdwtPG8LqSAiPn8p8HjD+PDxrP/HVnwRBnwtVKOn5zDDKsw0ma2Xt58oq97Rlp3t/mRNADEV/Ym6cDng=="],
+ "hono": ["hono@4.6.19", "", {}, "sha512-Xw5DwU2cewEsQ1DkDCdy6aBJkEBARl5loovoL1gL3/gw81RdaPbXrNJYp3LoQpzpJ7ECC/1OFi/vn3UZTLHFEw=="],
"hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="],
@@ -1156,8 +1153,6 @@
"https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
- "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="],
-
"iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="],
"ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
@@ -1178,7 +1173,7 @@
"is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
- "is-core-module": ["is-core-module@2.16.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g=="],
+ "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
"is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="],
@@ -1294,7 +1289,7 @@
"markdown-it-toc-done-right": ["markdown-it-toc-done-right@4.2.0", "", {}, "sha512-UB/IbzjWazwTlNAX0pvWNlJS8NKsOQ4syrXZQ/C72j+jirrsjVRT627lCaylrKJFBQWfRsPmIVQie8x38DEhAQ=="],
- "math-intrinsics": ["math-intrinsics@1.0.0", "", {}, "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA=="],
+ "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
"mathjax-full": ["mathjax-full@3.2.2", "", { "dependencies": { "esm": "^3.2.25", "mhchemparser": "^4.1.0", "mj-context-menu": "^0.6.1", "speech-rule-engine": "^4.0.6" } }, "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w=="],
@@ -1304,8 +1299,6 @@
"mensch": ["mensch@0.3.4", "", {}, "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g=="],
- "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
-
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
"mhchemparser": ["mhchemparser@4.2.1", "", {}, "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ=="],
@@ -1328,8 +1321,6 @@
"mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
- "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="],
-
"mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
"mimic-response": ["mimic-response@4.0.0", "", {}, "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="],
@@ -1354,7 +1345,7 @@
"mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
- "mlly": ["mlly@1.7.3", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^1.1.2", "pkg-types": "^1.2.1", "ufo": "^1.5.4" } }, "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A=="],
+ "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="],
"module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="],
@@ -1374,7 +1365,7 @@
"node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
- "node-fetch-native": ["node-fetch-native@1.6.4", "", {}, "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ=="],
+ "node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="],
"node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="],
@@ -1382,11 +1373,9 @@
"normalize-url": ["normalize-url@8.0.1", "", {}, "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="],
- "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="],
-
"nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="],
- "nypm": ["nypm@0.3.12", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", "pkg-types": "^1.2.0", "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA=="],
+ "nypm": ["nypm@0.5.2", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.2", "pkg-types": "^1.3.1", "tinyexec": "^0.3.2", "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-AHzvnyUJYSrrphPhRWWZNcoZfArGNp3Vrc4pm/ZurO74tYNTgAPrEyBQEKy+qioqmWlPXwvMZCG2wOaHlPG0Pw=="],
"oauth4webapi": ["oauth4webapi@3.1.4", "", {}, "sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg=="],
@@ -1394,7 +1383,7 @@
"obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="],
- "oclif": ["oclif@4.17.17", "", { "dependencies": { "@aws-sdk/client-cloudfront": "^3.726.1", "@aws-sdk/client-s3": "^3.722.0", "@inquirer/confirm": "^3.1.22", "@inquirer/input": "^2.2.4", "@inquirer/select": "^2.5.0", "@oclif/core": "^4.2.3", "@oclif/plugin-help": "^6.2.21", "@oclif/plugin-not-found": "^3.2.32", "@oclif/plugin-warn-if-update-available": "^3.1.30", "async-retry": "^1.3.3", "chalk": "^4", "change-case": "^4", "debug": "^4.4.0", "ejs": "^3.1.10", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^8.1", "github-slugger": "^2", "got": "^13", "lodash": "^4.17.21", "normalize-package-data": "^6", "semver": "^7.6.3", "sort-package-json": "^2.14.0", "tiny-jsonc": "^1.0.1", "validate-npm-package-name": "^5.0.1" }, "bin": { "oclif": "bin/run.js" } }, "sha512-k1aiaYO6LVzIm6uaMbQ5QceH/OzyhEz5bHIJLfiGJCs17fwnfab/m7jUAZ/4BlJ5OiA69GYmt++jcqHAOWW8Yg=="],
+ "oclif": ["oclif@4.17.20", "", { "dependencies": { "@aws-sdk/client-cloudfront": "^3.726.1", "@aws-sdk/client-s3": "^3.735.0", "@inquirer/confirm": "^3.1.22", "@inquirer/input": "^2.2.4", "@inquirer/select": "^2.5.0", "@oclif/core": "^4.2.3", "@oclif/plugin-help": "^6.2.21", "@oclif/plugin-not-found": "^3.2.32", "@oclif/plugin-warn-if-update-available": "^3.1.31", "async-retry": "^1.3.3", "chalk": "^4", "change-case": "^4", "debug": "^4.4.0", "ejs": "^3.1.10", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^8.1", "github-slugger": "^2", "got": "^13", "lodash": "^4.17.21", "normalize-package-data": "^6", "semver": "^7.6.3", "sort-package-json": "^2.14.0", "tiny-jsonc": "^1.0.1", "validate-npm-package-name": "^5.0.1" }, "bin": { "oclif": "bin/run.js" } }, "sha512-8zhZ8M2Of5oB3zLLZAr6rVEozCeXMYGJpnj/iTyefZSX9O9frimGqnpUgHnKhl3GAJS5UnPgJ9s3yLzv5IMudA=="],
"ohash": ["ohash@1.1.4", "", {}, "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g=="],
@@ -1470,9 +1459,9 @@
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
- "pkg-types": ["pkg-types@1.2.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.2", "pathe": "^1.1.2" } }, "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw=="],
+ "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="],
- "postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="],
+ "postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="],
"postgres-array": ["postgres-array@3.0.2", "", {}, "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog=="],
@@ -1484,7 +1473,7 @@
"postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="],
- "preact": ["preact@10.25.2", "", {}, "sha512-GEts1EH3oMnqdOIeXhlbBSddZ9nrINd070WBOiPO2ous1orrKGUM4SMDbwyjSWD1iMS2dBvaDjAa5qUhz3TXqw=="],
+ "preact": ["preact@10.25.4", "", {}, "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA=="],
"prom-client": ["prom-client@15.1.3", "", { "dependencies": { "@opentelemetry/api": "^1.4.0", "tdigest": "^0.1.1" } }, "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g=="],
@@ -1504,7 +1493,7 @@
"rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="],
- "readdirp": ["readdirp@4.0.2", "", {}, "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA=="],
+ "readdirp": ["readdirp@4.1.1", "", {}, "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw=="],
"redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="],
@@ -1524,9 +1513,9 @@
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
- "require-in-the-middle": ["require-in-the-middle@7.4.0", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ=="],
+ "require-in-the-middle": ["require-in-the-middle@7.5.0", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-/Tvpny/RVVicqlYTKwt/GtpZRsPG1CmJNhxVKGz+Sy/4MONfXCVNK69MFgGKdUt0/324q3ClI2dICcPgISrC8g=="],
- "resolve": ["resolve@1.22.9", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A=="],
+ "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="],
"resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="],
@@ -1544,7 +1533,7 @@
"rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
- "rollup": ["rollup@4.28.1", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.28.1", "@rollup/rollup-android-arm64": "4.28.1", "@rollup/rollup-darwin-arm64": "4.28.1", "@rollup/rollup-darwin-x64": "4.28.1", "@rollup/rollup-freebsd-arm64": "4.28.1", "@rollup/rollup-freebsd-x64": "4.28.1", "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", "@rollup/rollup-linux-arm-musleabihf": "4.28.1", "@rollup/rollup-linux-arm64-gnu": "4.28.1", "@rollup/rollup-linux-arm64-musl": "4.28.1", "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", "@rollup/rollup-linux-riscv64-gnu": "4.28.1", "@rollup/rollup-linux-s390x-gnu": "4.28.1", "@rollup/rollup-linux-x64-gnu": "4.28.1", "@rollup/rollup-linux-x64-musl": "4.28.1", "@rollup/rollup-win32-arm64-msvc": "4.28.1", "@rollup/rollup-win32-ia32-msvc": "4.28.1", "@rollup/rollup-win32-x64-msvc": "4.28.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg=="],
+ "rollup": ["rollup@4.32.1", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.32.1", "@rollup/rollup-android-arm64": "4.32.1", "@rollup/rollup-darwin-arm64": "4.32.1", "@rollup/rollup-darwin-x64": "4.32.1", "@rollup/rollup-freebsd-arm64": "4.32.1", "@rollup/rollup-freebsd-x64": "4.32.1", "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", "@rollup/rollup-linux-arm-musleabihf": "4.32.1", "@rollup/rollup-linux-arm64-gnu": "4.32.1", "@rollup/rollup-linux-arm64-musl": "4.32.1", "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", "@rollup/rollup-linux-riscv64-gnu": "4.32.1", "@rollup/rollup-linux-s390x-gnu": "4.32.1", "@rollup/rollup-linux-x64-gnu": "4.32.1", "@rollup/rollup-linux-x64-musl": "4.32.1", "@rollup/rollup-win32-arm64-msvc": "4.32.1", "@rollup/rollup-win32-ia32-msvc": "4.32.1", "@rollup/rollup-win32-x64-msvc": "4.32.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA=="],
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
@@ -1612,7 +1601,7 @@
"spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="],
- "spdx-license-ids": ["spdx-license-ids@3.0.20", "", {}, "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw=="],
+ "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="],
"speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="],
@@ -1640,8 +1629,6 @@
"strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="],
- "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="],
-
"strnum": ["strnum@1.0.5", "", {}, "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="],
"superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="],
@@ -1658,7 +1645,9 @@
"tdigest": ["tdigest@0.1.2", "", { "dependencies": { "bintrees": "1.0.2" } }, "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA=="],
- "tiny-jsonc": ["tiny-jsonc@1.0.1", "", {}, "sha512-ik6BCxzva9DoiEfDX/li0L2cWKPPENYvixUprFdl3YPi4bZZUhDnNI9YUkacrv+uIG90dnxR5mNqaoD6UhD6Bw=="],
+ "tiny-jsonc": ["tiny-jsonc@1.0.2", "", {}, "sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw=="],
+
+ "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="],
"tinyglobby": ["tinyglobby@0.2.10", "", { "dependencies": { "fdir": "^6.4.2", "picomatch": "^4.0.2" } }, "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew=="],
@@ -1704,7 +1693,7 @@
"universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="],
- "unplugin": ["unplugin@1.16.0", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ=="],
+ "unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="],
"unzipit": ["unzipit@1.4.3", "", { "dependencies": { "uzip-module": "^1.0.2" } }, "sha512-gsq2PdJIWWGhx5kcdWStvNWit9FVdTewm4SEG7gFskWs+XCVaULt9+BwuoBtJiRE8eo3L1IPAOrbByNLtLtIlg=="],
@@ -1784,55 +1773,19 @@
"zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
- "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
- "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
- "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
"@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="],
- "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
"@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="],
- "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
- "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.714.0", "", { "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" } }, "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA=="],
-
"@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="],
"@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="],
- "@inquirer/checkbox/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/checkbox/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
"@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
- "@inquirer/editor/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/expand/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/number/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/password/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/prompts/@inquirer/confirm": ["@inquirer/confirm@5.1.1", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg=="],
-
- "@inquirer/prompts/@inquirer/input": ["@inquirer/input@4.1.1", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/type": "^3.0.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg=="],
-
- "@inquirer/prompts/@inquirer/select": ["@inquirer/select@4.0.4", "", { "dependencies": { "@inquirer/core": "^10.1.2", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w=="],
-
- "@inquirer/rawlist/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/search/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/search/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
+ "@inquirer/prompts/@inquirer/select": ["@inquirer/select@4.0.6", "", { "dependencies": { "@inquirer/core": "^10.1.4", "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" } }, "sha512-yANzIiNZ8fhMm4NORm+a74+KFYHmf7BZphSOBovIzYPVLquseTGEkU5l2UTnBOf5k0VLmTgPighNDLE9QtbViQ=="],
"@inquirer/select/@inquirer/core": ["@inquirer/core@9.2.1", "", { "dependencies": { "@inquirer/figures": "^1.0.6", "@inquirer/type": "^2.0.0", "@types/mute-stream": "^0.0.4", "@types/node": "^22.5.5", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg=="],
@@ -1842,14 +1795,6 @@
"@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
- "@oclif/plugin-help/@oclif/core": ["@oclif/core@4.2.3", "", { "dependencies": { "ansi-escapes": "^4.3.2", "ansis": "^3.8.1", "clean-stack": "^3.0.1", "cli-spinners": "^2.9.2", "debug": "^4.4.0", "ejs": "^3.1.10", "get-package-type": "^0.1.0", "globby": "^11.1.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", "lilconfig": "^3.1.3", "minimatch": "^9.0.5", "semver": "^7.6.3", "string-width": "^4.2.3", "supports-color": "^8", "widest-line": "^3.1.0", "wordwrap": "^1.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-JVEONwSZAfTNZCS81ah2u42Ya1mSeutCtHpoqMq/U+vP9Ka3Ni15/AqtcVtpH1afdUUn5RgtJYj+zlsrvMwksA=="],
-
- "@oclif/plugin-not-found/@oclif/core": ["@oclif/core@4.2.0", "", { "dependencies": { "ansi-escapes": "^4.3.2", "ansis": "^3.3.2", "clean-stack": "^3.0.1", "cli-spinners": "^2.9.2", "debug": "^4.4.0", "ejs": "^3.1.10", "get-package-type": "^0.1.0", "globby": "^11.1.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", "lilconfig": "^3.1.3", "minimatch": "^9.0.5", "semver": "^7.6.3", "string-width": "^4.2.3", "supports-color": "^8", "widest-line": "^3.1.0", "wordwrap": "^1.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-ETM2N/GL7W37Kv1Afv1j1Gh77CynS2ubEPP+p+MnjUXEjghNe7+bKAWhPkHnBuFAVFAqdv0qMpUAjxKLbsmbJw=="],
-
- "@oclif/plugin-not-found/ansis": ["ansis@3.5.2", "", {}, "sha512-5uGcUZRbORJeEppVdWfZOSybTMz+Ou+84HepgK081Yk5+pPMMzWf/XGxiAT6bfBqCghRB4MwBtYn0CHqINRVag=="],
-
- "@oclif/plugin-warn-if-update-available/@oclif/core": ["@oclif/core@4.2.3", "", { "dependencies": { "ansi-escapes": "^4.3.2", "ansis": "^3.8.1", "clean-stack": "^3.0.1", "cli-spinners": "^2.9.2", "debug": "^4.4.0", "ejs": "^3.1.10", "get-package-type": "^0.1.0", "globby": "^11.1.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", "lilconfig": "^3.1.3", "minimatch": "^9.0.5", "semver": "^7.6.3", "string-width": "^4.2.3", "supports-color": "^8", "widest-line": "^3.1.0", "wordwrap": "^1.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-JVEONwSZAfTNZCS81ah2u42Ya1mSeutCtHpoqMq/U+vP9Ka3Ni15/AqtcVtpH1afdUUn5RgtJYj+zlsrvMwksA=="],
-
"@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@1.29.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA=="],
"@opentelemetry/instrumentation-pg/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.27.0", "", {}, "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg=="],
@@ -1884,16 +1829,12 @@
"decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
- "execa/get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="],
-
- "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="],
-
- "execa/onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="],
-
"filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="],
"fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
+ "giget/pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="],
+
"got/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
"http-call/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="],
@@ -1904,13 +1845,13 @@
"js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
- "log-symbols/chalk": ["chalk@5.4.0", "", {}, "sha512-ZkD35Mx92acjB2yNJgziGqT9oKHEOxjTBTDRpOsRWtdecL/0jM3z5kM/CTzHWvHIen1GvkM85p6TuFfDGfc8/Q=="],
-
"log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
"minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
- "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
+ "mlly/pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="],
+
+ "nypm/pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="],
"oclif/@inquirer/confirm": ["@inquirer/confirm@3.2.0", "", { "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3" } }, "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw=="],
@@ -1918,14 +1859,14 @@
"oclif/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
- "openapi3-ts/yaml": ["yaml@2.6.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg=="],
-
- "ora/chalk": ["chalk@5.4.0", "", {}, "sha512-ZkD35Mx92acjB2yNJgziGqT9oKHEOxjTBTDRpOsRWtdecL/0jM3z5kM/CTzHWvHIen1GvkM85p6TuFfDGfc8/Q=="],
+ "openapi3-ts/yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="],
"ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
"pg/pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="],
+ "pkg-types/pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="],
+
"simple-swizzle/is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="],
"speech-rule-engine/commander": ["commander@9.2.0", "", {}, "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w=="],
@@ -1952,22 +1893,10 @@
"xss/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
- "@aws-crypto/crc32/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
- "@aws-crypto/crc32c/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
- "@aws-crypto/sha1-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
"@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
- "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
"@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
- "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
- "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@3.7.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg=="],
-
"@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
"@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="],
@@ -2014,54 +1943,8 @@
"@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="],
- "@inquirer/checkbox/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/checkbox/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
"@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
- "@inquirer/editor/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/editor/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/editor/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/expand/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/expand/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/expand/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/number/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/number/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/number/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/password/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/password/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/password/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/prompts/@inquirer/confirm/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/prompts/@inquirer/input/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/prompts/@inquirer/select/@inquirer/core": ["@inquirer/core@10.1.2", "", { "dependencies": { "@inquirer/figures": "^1.0.9", "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" } }, "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ=="],
-
- "@inquirer/prompts/@inquirer/select/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/rawlist/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/rawlist/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/rawlist/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/search/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/search/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
"@inquirer/select/@inquirer/core/@inquirer/type": ["@inquirer/type@2.0.0", "", { "dependencies": { "mute-stream": "^1.0.0" } }, "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag=="],
"@inquirer/select/@inquirer/core/mute-stream": ["mute-stream@1.0.0", "", {}, "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA=="],
@@ -2076,8 +1959,6 @@
"@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="],
- "@oclif/plugin-not-found/@oclif/core/ansis": ["ansis@3.4.0", "", {}, "sha512-zVESKSQhWaPhGaWiKj1k+UqvpC7vPBBgG3hjQEeIx2YGzylWt8qA3ziAzRuUtm0OnaGsZKjIvfl8D/sJTt/I0w=="],
-
"@opentelemetry/instrumentation-pg/@types/pg/pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="],
"@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.53.0", "", { "dependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw=="],
@@ -2186,36 +2067,6 @@
"@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="],
- "@inquirer/checkbox/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/editor/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/expand/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/number/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/password/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/prompts/@inquirer/confirm/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/prompts/@inquirer/confirm/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/prompts/@inquirer/confirm/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/prompts/@inquirer/input/@inquirer/core/@inquirer/figures": ["@inquirer/figures@1.0.9", "", {}, "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ=="],
-
- "@inquirer/prompts/@inquirer/input/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/prompts/@inquirer/input/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/prompts/@inquirer/select/@inquirer/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
-
- "@inquirer/prompts/@inquirer/select/@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
-
- "@inquirer/rawlist/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/search/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
"@inquirer/select/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"@opentelemetry/instrumentation-pg/@types/pg/pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="],
@@ -2254,12 +2105,6 @@
"web-resource-inliner/htmlparser2/domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
- "@inquirer/prompts/@inquirer/confirm/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/prompts/@inquirer/input/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "@inquirer/prompts/@inquirer/select/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
"oclif/@inquirer/confirm/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"oclif/@inquirer/input/@inquirer/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
diff --git a/classes/database/attachment.ts b/classes/database/attachment.ts
deleted file mode 100644
index 4d1c3bf9..00000000
--- a/classes/database/attachment.ts
+++ /dev/null
@@ -1,336 +0,0 @@
-import { proxyUrl } from "@/response";
-import type { Attachment as ApiAttachment } from "@versia/client/types";
-import type { ContentFormat } from "@versia/federation/types";
-import { db } from "@versia/kit/db";
-import { Medias } from "@versia/kit/tables";
-import {
- type InferInsertModel,
- type InferSelectModel,
- type SQL,
- desc,
- eq,
- inArray,
-} from "drizzle-orm";
-import sharp from "sharp";
-import { z } from "zod";
-import { MediaBackendType } from "~/packages/config-manager/config.type";
-import { config } from "~/packages/config-manager/index.ts";
-import { ApiError } from "../errors/api-error.ts";
-import { MediaManager } from "../media/media-manager.ts";
-import { MediaJobType, mediaQueue } from "../queues/media.ts";
-import { BaseInterface } from "./base.ts";
-
-type MediaType = InferSelectModel;
-
-export class Media extends BaseInterface {
- public static schema: z.ZodType = z.object({
- id: z.string().uuid(),
- type: z.enum(["unknown", "image", "gifv", "video", "audio"]),
- url: z.string().url(),
- remote_url: z.string().url().nullable(),
- preview_url: z.string().url().nullable(),
- text_url: z.string().url().nullable(),
- meta: z
- .object({
- width: z.number().optional(),
- height: z.number().optional(),
- fps: z.number().optional(),
- size: z.string().optional(),
- duration: z.number().optional(),
- length: z.string().optional(),
- aspect: z.number().optional(),
- original: z.object({
- width: z.number().optional(),
- height: z.number().optional(),
- size: z.string().optional(),
- aspect: z.number().optional(),
- }),
- })
- .nullable(),
- description: z.string().nullable(),
- blurhash: z.string().nullable(),
- });
-
- public static $type: MediaType;
-
- public async reload(): Promise {
- const reloaded = await Media.fromId(this.data.id);
-
- if (!reloaded) {
- throw new Error("Failed to reload attachment");
- }
-
- this.data = reloaded.data;
- }
-
- public static async fromId(id: string | null): Promise {
- if (!id) {
- return null;
- }
-
- return await Media.fromSql(eq(Medias.id, id));
- }
-
- public static async fromIds(ids: string[]): Promise {
- return await Media.manyFromSql(inArray(Medias.id, ids));
- }
-
- public static async fromSql(
- sql: SQL | undefined,
- orderBy: SQL | undefined = desc(Medias.id),
- ): Promise {
- const found = await db.query.Medias.findFirst({
- where: sql,
- orderBy,
- });
-
- if (!found) {
- return null;
- }
- return new Media(found);
- }
-
- public static async manyFromSql(
- sql: SQL | undefined,
- orderBy: SQL | undefined = desc(Medias.id),
- limit?: number,
- offset?: number,
- extra?: Parameters[0],
- ): Promise {
- const found = await db.query.Medias.findMany({
- where: sql,
- orderBy,
- limit,
- offset,
- with: extra?.with,
- });
-
- return found.map((s) => new Media(s));
- }
-
- public async update(newAttachment: Partial): Promise {
- await db
- .update(Medias)
- .set(newAttachment)
- .where(eq(Medias.id, this.id));
-
- const updated = await Media.fromId(this.data.id);
-
- if (!updated) {
- throw new Error("Failed to update attachment");
- }
-
- this.data = updated.data;
- return updated.data;
- }
-
- public save(): Promise {
- return this.update(this.data);
- }
-
- public async delete(ids?: string[]): Promise {
- if (Array.isArray(ids)) {
- await db.delete(Medias).where(inArray(Medias.id, ids));
- } else {
- await db.delete(Medias).where(eq(Medias.id, this.id));
- }
- }
-
- public static async insert(
- data: InferInsertModel,
- ): Promise {
- const inserted = (await db.insert(Medias).values(data).returning())[0];
-
- const attachment = await Media.fromId(inserted.id);
-
- if (!attachment) {
- throw new Error("Failed to insert attachment");
- }
-
- return attachment;
- }
-
- public static async fromFile(
- file: File,
- options?: {
- description?: string;
- thumbnail?: File;
- },
- ): Promise {
- if (file.size > config.validation.max_media_size) {
- throw new ApiError(
- 413,
- `File too large, max size is ${config.validation.max_media_size} bytes`,
- );
- }
-
- if (
- config.validation.enforce_mime_types &&
- !config.validation.allowed_mime_types.includes(file.type)
- ) {
- throw new ApiError(
- 415,
- `File type ${file.type} is not allowed`,
- `Allowed types: ${config.validation.allowed_mime_types.join(", ")}`,
- );
- }
-
- const sha256 = new Bun.SHA256();
-
- const isImage = file.type.startsWith("image/");
-
- const metadata = isImage
- ? await sharp(await file.arrayBuffer()).metadata()
- : null;
-
- const mediaManager = new MediaManager(config);
-
- const { path } = await mediaManager.addFile(file);
-
- const url = Media.getUrl(path);
-
- let thumbnailUrl = "";
-
- if (options?.thumbnail) {
- const { path } = await mediaManager.addFile(options.thumbnail);
-
- thumbnailUrl = Media.getUrl(path);
- }
-
- const newAttachment = await Media.insert({
- url,
- thumbnailUrl: thumbnailUrl || undefined,
- sha256: sha256.update(await file.arrayBuffer()).digest("hex"),
- mimeType: file.type,
- description: options?.description ?? "",
- size: file.size,
- width: metadata?.width ?? undefined,
- height: metadata?.height ?? undefined,
- });
-
- if (config.media.conversion.convert_images) {
- await mediaQueue.add(MediaJobType.ConvertMedia, {
- attachmentId: newAttachment.id,
- filename: file.name,
- });
- }
-
- return newAttachment;
- }
-
- public get id(): string {
- return this.data.id;
- }
-
- public static getUrl(name: string): string {
- if (config.media.backend === MediaBackendType.Local) {
- return new URL(`/media/${name}`, config.http.base_url).toString();
- }
- if (config.media.backend === MediaBackendType.S3) {
- return new URL(`/${name}`, config.s3.public_url).toString();
- }
- return "";
- }
-
- public getMastodonType(): ApiAttachment["type"] {
- if (this.data.mimeType.startsWith("image/")) {
- return "image";
- }
- if (this.data.mimeType.startsWith("video/")) {
- return "video";
- }
- if (this.data.mimeType.startsWith("audio/")) {
- return "audio";
- }
-
- return "unknown";
- }
-
- public toApiMeta(): ApiAttachment["meta"] {
- return {
- width: this.data.width || undefined,
- height: this.data.height || undefined,
- fps: this.data.fps || undefined,
- size:
- this.data.width && this.data.height
- ? `${this.data.width}x${this.data.height}`
- : undefined,
- duration: this.data.duration || undefined,
- length: undefined,
- aspect:
- this.data.width && this.data.height
- ? this.data.width / this.data.height
- : undefined,
- original: {
- width: this.data.width || undefined,
- height: this.data.height || undefined,
- size:
- this.data.width && this.data.height
- ? `${this.data.width}x${this.data.height}`
- : undefined,
- aspect:
- this.data.width && this.data.height
- ? this.data.width / this.data.height
- : undefined,
- },
- // Idk whether size or length is the right value
- };
- }
-
- public toApi(): ApiAttachment {
- return {
- id: this.data.id,
- type: this.getMastodonType(),
- url: proxyUrl(this.data.url) ?? "",
- remote_url: proxyUrl(this.data.remoteUrl),
- preview_url: proxyUrl(this.data.thumbnailUrl || this.data.url),
- text_url: null,
- meta: this.toApiMeta(),
- description: this.data.description,
- blurhash: this.data.blurhash,
- };
- }
-
- public toVersia(): ContentFormat {
- return {
- [this.data.mimeType]: {
- content: this.data.url,
- remote: true,
- // TODO: Replace BlurHash with thumbhash
- // thumbhash: this.data.blurhash ?? undefined,
- description: this.data.description ?? undefined,
- duration: this.data.duration ?? undefined,
- fps: this.data.fps ?? undefined,
- height: this.data.height ?? undefined,
- size: this.data.size ?? undefined,
- hash: this.data.sha256
- ? {
- sha256: this.data.sha256,
- }
- : undefined,
- width: this.data.width ?? undefined,
- },
- };
- }
-
- public static fromVersia(
- attachmentToConvert: ContentFormat,
- ): Promise {
- const key = Object.keys(attachmentToConvert)[0];
- const value = attachmentToConvert[key];
-
- return Media.insert({
- mimeType: key,
- url: value.content,
- description: value.description || undefined,
- duration: value.duration || undefined,
- fps: value.fps || undefined,
- height: value.height || undefined,
- // biome-ignore lint/style/useExplicitLengthCheck: Biome thinks we're checking if size is not zero
- size: value.size || undefined,
- width: value.width || undefined,
- sha256: value.hash?.sha256 || undefined,
- // blurhash: value.blurhash || undefined,
- });
- }
-}
diff --git a/classes/database/emoji.ts b/classes/database/emoji.ts
index a2094bc1..14abd4f4 100644
--- a/classes/database/emoji.ts
+++ b/classes/database/emoji.ts
@@ -2,8 +2,8 @@ import { emojiValidatorWithColons, emojiValidatorWithIdentifiers } from "@/api";
import { proxyUrl } from "@/response";
import type { Emoji as APIEmoji } from "@versia/client/types";
import type { CustomEmojiExtension } from "@versia/federation/types";
-import { type Instance, db } from "@versia/kit/db";
-import { Emojis, type Instances } from "@versia/kit/tables";
+import { type Instance, Media, db } from "@versia/kit/db";
+import { Emojis, type Instances, type Medias } from "@versia/kit/tables";
import {
type InferInsertModel,
type InferSelectModel,
@@ -17,11 +17,12 @@ import {
import { z } from "zod";
import { BaseInterface } from "./base.ts";
-type EmojiWithInstance = InferSelectModel & {
+type EmojiType = InferSelectModel & {
+ media: InferSelectModel;
instance: InferSelectModel | null;
};
-export class Emoji extends BaseInterface {
+export class Emoji extends BaseInterface {
public static schema = z.object({
id: z.string(),
shortcode: z.string(),
@@ -32,7 +33,13 @@ export class Emoji extends BaseInterface {
global: z.boolean(),
});
- public static $type: EmojiWithInstance;
+ public static $type: EmojiType;
+ public media: Media;
+
+ public constructor(data: EmojiType) {
+ super(data);
+ this.media = new Media(data.media);
+ }
public async reload(): Promise {
const reloaded = await Emoji.fromId(this.data.id);
@@ -65,6 +72,7 @@ export class Emoji extends BaseInterface {
orderBy,
with: {
instance: true,
+ media: true,
},
});
@@ -86,15 +94,13 @@ export class Emoji extends BaseInterface {
orderBy,
limit,
offset,
- with: { ...extra?.with, instance: true },
+ with: { ...extra?.with, instance: true, media: true },
});
return found.map((s) => new Emoji(s));
}
- public async update(
- newEmoji: Partial,
- ): Promise {
+ public async update(newEmoji: Partial): Promise {
await db.update(Emojis).set(newEmoji).where(eq(Emojis.id, this.id));
const updated = await Emoji.fromId(this.data.id);
@@ -107,7 +113,7 @@ export class Emoji extends BaseInterface {
return updated.data;
}
- public save(): Promise {
+ public save(): Promise {
return this.update(this.data);
}
@@ -182,29 +188,25 @@ export class Emoji extends BaseInterface {
return {
id: this.id,
shortcode: this.data.shortcode,
- static_url: proxyUrl(this.data.url) ?? "", // TODO: Add static version
- url: proxyUrl(this.data.url) ?? "",
+ static_url: proxyUrl(this.media.getUrl()) ?? "", // TODO: Add static version
+ url: proxyUrl(this.media.getUrl()) ?? "",
visible_in_picker: this.data.visibleInPicker,
category: this.data.category ?? undefined,
global: this.data.ownerId === null,
- description: this.data.alt ?? undefined,
+ description:
+ this.media.data.content[this.media.getPreferredMimeType()]
+ .description ?? undefined,
};
}
public toVersia(): CustomEmojiExtension["emojis"][0] {
return {
name: `:${this.data.shortcode}:`,
- url: {
- [this.data.contentType]: {
- content: this.data.url,
- description: this.data.alt || undefined,
- remote: true,
- },
- },
+ url: this.media.toVersia(),
};
}
- public static fromVersia(
+ public static async fromVersia(
emoji: CustomEmojiExtension["emojis"][0],
instance: Instance,
): Promise {
@@ -217,11 +219,11 @@ export class Emoji extends BaseInterface {
throw new Error("Could not extract shortcode from emoji name");
}
+ const media = await Media.fromVersia(emoji.url);
+
return Emoji.insert({
shortcode,
- url: Object.entries(emoji.url)[0][1].content,
- alt: Object.entries(emoji.url)[0][1].description || undefined,
- contentType: Object.keys(emoji.url)[0],
+ mediaId: media.id,
visibleInPicker: true,
instanceId: instance.id,
});
diff --git a/classes/database/media.ts b/classes/database/media.ts
new file mode 100644
index 00000000..0fe0477e
--- /dev/null
+++ b/classes/database/media.ts
@@ -0,0 +1,551 @@
+import { join } from "node:path";
+import { mimeLookup } from "@/content_types.ts";
+import { proxyUrl } from "@/response";
+import type { Attachment as ApiAttachment } from "@versia/client/types";
+import type { ContentFormat } from "@versia/federation/types";
+import { db } from "@versia/kit/db";
+import { Medias } from "@versia/kit/tables";
+import { S3Client, SHA256, randomUUIDv7, write } from "bun";
+import {
+ type InferInsertModel,
+ type InferSelectModel,
+ type SQL,
+ desc,
+ eq,
+ inArray,
+} from "drizzle-orm";
+import sharp from "sharp";
+import { z } from "zod";
+import { MediaBackendType } from "~/packages/config-manager/config.type";
+import { config } from "~/packages/config-manager/index.ts";
+import { ApiError } from "../errors/api-error.ts";
+import { getMediaHash } from "../media/media-hasher.ts";
+import { MediaJobType, mediaQueue } from "../queues/media.ts";
+import { BaseInterface } from "./base.ts";
+
+type MediaType = InferSelectModel;
+
+export class Media extends BaseInterface {
+ public static schema: z.ZodType = z.object({
+ id: z.string().uuid(),
+ type: z.enum(["unknown", "image", "gifv", "video", "audio"]),
+ url: z.string().url(),
+ remote_url: z.string().url().nullable(),
+ preview_url: z.string().url().nullable(),
+ text_url: z.string().url().nullable(),
+ meta: z
+ .object({
+ width: z.number().optional(),
+ height: z.number().optional(),
+ fps: z.number().optional(),
+ size: z.string().optional(),
+ duration: z.number().optional(),
+ length: z.string().optional(),
+ aspect: z.number().optional(),
+ original: z.object({
+ width: z.number().optional(),
+ height: z.number().optional(),
+ size: z.string().optional(),
+ aspect: z.number().optional(),
+ }),
+ })
+ .nullable(),
+ description: z.string().nullable(),
+ blurhash: z.string().nullable(),
+ });
+
+ public static $type: MediaType;
+
+ public async reload(): Promise {
+ const reloaded = await Media.fromId(this.data.id);
+
+ if (!reloaded) {
+ throw new Error("Failed to reload attachment");
+ }
+
+ this.data = reloaded.data;
+ }
+
+ public static async fromId(id: string | null): Promise {
+ if (!id) {
+ return null;
+ }
+
+ return await Media.fromSql(eq(Medias.id, id));
+ }
+
+ public static async fromIds(ids: string[]): Promise {
+ return await Media.manyFromSql(inArray(Medias.id, ids));
+ }
+
+ public static async fromSql(
+ sql: SQL | undefined,
+ orderBy: SQL | undefined = desc(Medias.id),
+ ): Promise {
+ const found = await db.query.Medias.findFirst({
+ where: sql,
+ orderBy,
+ });
+
+ if (!found) {
+ return null;
+ }
+ return new Media(found);
+ }
+
+ public static async manyFromSql(
+ sql: SQL | undefined,
+ orderBy: SQL | undefined = desc(Medias.id),
+ limit?: number,
+ offset?: number,
+ extra?: Parameters[0],
+ ): Promise {
+ const found = await db.query.Medias.findMany({
+ where: sql,
+ orderBy,
+ limit,
+ offset,
+ with: extra?.with,
+ });
+
+ return found.map((s) => new Media(s));
+ }
+
+ public async update(newAttachment: Partial): Promise {
+ await db
+ .update(Medias)
+ .set(newAttachment)
+ .where(eq(Medias.id, this.id));
+
+ const updated = await Media.fromId(this.data.id);
+
+ if (!updated) {
+ throw new Error("Failed to update attachment");
+ }
+
+ this.data = updated.data;
+ return updated.data;
+ }
+
+ public save(): Promise {
+ return this.update(this.data);
+ }
+
+ public async delete(ids?: string[]): Promise {
+ if (Array.isArray(ids)) {
+ await db.delete(Medias).where(inArray(Medias.id, ids));
+ } else {
+ await db.delete(Medias).where(eq(Medias.id, this.id));
+ }
+
+ // TODO: Also delete the file from the media manager
+ }
+
+ public static async insert(
+ data: InferInsertModel,
+ ): Promise {
+ const inserted = (await db.insert(Medias).values(data).returning())[0];
+
+ const attachment = await Media.fromId(inserted.id);
+
+ if (!attachment) {
+ throw new Error("Failed to insert attachment");
+ }
+
+ return attachment;
+ }
+
+ private static async upload(file: File): Promise<{
+ path: string;
+ }> {
+ const fileName = file.name ?? randomUUIDv7();
+ const hash = await getMediaHash(file);
+
+ switch (config.media.backend) {
+ case MediaBackendType.Local: {
+ const path = join(
+ config.media.local_uploads_folder,
+ hash,
+ fileName,
+ );
+
+ await write(path, file);
+
+ return { path: join(hash, fileName) };
+ }
+
+ case MediaBackendType.S3: {
+ const path = join(hash, fileName);
+
+ if (!config.s3) {
+ throw new ApiError(500, "S3 configuration missing");
+ }
+
+ const client = new S3Client({
+ endpoint: config.s3.endpoint,
+ region: config.s3.region,
+ bucket: config.s3.bucket_name,
+ accessKeyId: config.s3.access_key,
+ secretAccessKey: config.s3.secret_access_key,
+ });
+
+ await client.write(path, file);
+
+ return { path };
+ }
+ }
+ }
+
+ public static async fromFile(
+ file: File,
+ options?: {
+ description?: string;
+ thumbnail?: File;
+ },
+ ): Promise {
+ Media.checkFile(file);
+
+ const { path } = await Media.upload(file);
+
+ const url = Media.getUrl(path);
+
+ let thumbnailUrl = "";
+
+ if (options?.thumbnail) {
+ const { path } = await Media.upload(options.thumbnail);
+
+ thumbnailUrl = Media.getUrl(path);
+ }
+
+ const content = await Media.fileToContentFormat(file, url, {
+ description: options?.description,
+ });
+ const thumbnailContent = options?.thumbnail
+ ? await Media.fileToContentFormat(options.thumbnail, thumbnailUrl, {
+ description: options?.description,
+ })
+ : undefined;
+
+ const newAttachment = await Media.insert({
+ content,
+ thumbnail: thumbnailContent,
+ });
+
+ if (config.media.conversion.convert_images) {
+ await mediaQueue.add(MediaJobType.ConvertMedia, {
+ attachmentId: newAttachment.id,
+ filename: file.name,
+ });
+ }
+
+ await mediaQueue.add(MediaJobType.CalculateMetadata, {
+ attachmentId: newAttachment.id,
+ filename: file.name,
+ });
+
+ return newAttachment;
+ }
+
+ public static async fromUrl(
+ uri: URL,
+ options?: {
+ description?: string;
+ },
+ ): Promise {
+ const mimeType = await mimeLookup(uri);
+
+ const content: ContentFormat = {
+ [mimeType]: {
+ content: uri.toString(),
+ remote: true,
+ description: options?.description,
+ },
+ };
+
+ const newAttachment = await Media.insert({
+ content,
+ });
+
+ await mediaQueue.add(MediaJobType.CalculateMetadata, {
+ attachmentId: newAttachment.id,
+ // CalculateMetadata doesn't use the filename, but the type is annoying
+ // and requires it anyway
+ filename: "blank",
+ });
+
+ return newAttachment;
+ }
+
+ private static checkFile(file: File): void {
+ if (file.size > config.validation.max_media_size) {
+ throw new ApiError(
+ 413,
+ `File too large, max size is ${config.validation.max_media_size} bytes`,
+ );
+ }
+
+ if (
+ config.validation.enforce_mime_types &&
+ !config.validation.allowed_mime_types.includes(file.type)
+ ) {
+ throw new ApiError(
+ 415,
+ `File type ${file.type} is not allowed`,
+ `Allowed types: ${config.validation.allowed_mime_types.join(", ")}`,
+ );
+ }
+ }
+
+ public async updateFromFile(file: File): Promise {
+ Media.checkFile(file);
+
+ const { path } = await Media.upload(file);
+
+ const url = Media.getUrl(path);
+
+ const content = await Media.fileToContentFormat(file, url, {
+ description:
+ this.data.content[Object.keys(this.data.content)[0]]
+ .description || undefined,
+ });
+
+ await this.update({
+ content,
+ });
+
+ await mediaQueue.add(MediaJobType.CalculateMetadata, {
+ attachmentId: this.id,
+ filename: file.name,
+ });
+ }
+
+ public async updateFromUrl(uri: URL): Promise {
+ const mimeType = await mimeLookup(uri);
+
+ const content: ContentFormat = {
+ [mimeType]: {
+ content: uri.toString(),
+ remote: true,
+ description:
+ this.data.content[Object.keys(this.data.content)[0]]
+ .description || undefined,
+ },
+ };
+
+ await this.update({
+ content,
+ });
+
+ await mediaQueue.add(MediaJobType.CalculateMetadata, {
+ attachmentId: this.id,
+ filename: "blank",
+ });
+ }
+
+ public async updateThumbnail(file: File): Promise {
+ Media.checkFile(file);
+
+ const { path } = await Media.upload(file);
+
+ const url = Media.getUrl(path);
+
+ const content = await Media.fileToContentFormat(file, url);
+
+ await this.update({
+ thumbnail: content,
+ });
+ }
+
+ public async updateMetadata(
+ metadata: Partial>,
+ ): Promise {
+ const content = this.data.content;
+
+ for (const type of Object.keys(content)) {
+ content[type] = {
+ ...content[type],
+ ...metadata,
+ };
+ }
+
+ await this.update({
+ content,
+ });
+ }
+
+ public get id(): string {
+ return this.data.id;
+ }
+
+ public static getUrl(name: string): string {
+ if (config.media.backend === MediaBackendType.Local) {
+ return new URL(`/media/${name}`, config.http.base_url).toString();
+ }
+ if (config.media.backend === MediaBackendType.S3) {
+ return new URL(`/${name}`, config.s3?.public_url).toString();
+ }
+ return "";
+ }
+
+ public getUrl(): string {
+ const type = this.getPreferredMimeType();
+
+ return this.data.content[type]?.content;
+ }
+
+ /**
+ * Gets favourite MIME type for the attachment
+ * Uses a hardcoded list of preferred types, for images
+ *
+ * @returns {string} Preferred MIME type
+ */
+ public getPreferredMimeType(): string {
+ return Media.getPreferredMimeType(Object.keys(this.data.content));
+ }
+
+ /**
+ * Gets favourite MIME type from a list
+ * Uses a hardcoded list of preferred types, for images
+ *
+ * @returns {string} Preferred MIME type
+ */
+ public static getPreferredMimeType(types: string[]): string {
+ const ranking = [
+ "image/svg+xml",
+ "image/avif",
+ "image/jxl",
+ "image/webp",
+ "image/heif",
+ "image/heif-sequence",
+ "image/heic",
+ "image/heic-sequence",
+ "image/apng",
+ "image/gif",
+ "image/png",
+ "image/jpeg",
+ "image/bmp",
+ ];
+
+ return ranking.find((type) => types.includes(type)) ?? types[0];
+ }
+
+ /**
+ * Maps MIME type to Mastodon attachment type
+ *
+ * @returns
+ */
+ public getMastodonType(): ApiAttachment["type"] {
+ const type = this.getPreferredMimeType();
+
+ if (type.startsWith("image/")) {
+ return "image";
+ }
+ if (type.startsWith("video/")) {
+ return "video";
+ }
+ if (type.startsWith("audio/")) {
+ return "audio";
+ }
+
+ return "unknown";
+ }
+
+ /**
+ * Extracts metadata from a file and outputs as ContentFormat
+ *
+ * Does not calculate thumbhash (do this in a worker)
+ * @param file
+ * @param uri Uploaded file URI
+ * @param options Extra metadata, such as description
+ * @returns
+ */
+ public static async fileToContentFormat(
+ file: File,
+ uri: string,
+ options?: Partial<{
+ description: string;
+ }>,
+ ): Promise {
+ const buffer = await file.arrayBuffer();
+ const isImage = file.type.startsWith("image/");
+ const { width, height } = isImage ? await sharp(buffer).metadata() : {};
+ const hash = new SHA256().update(file).digest("hex");
+
+ // Missing: fps, duration
+ // Thumbhash should be added in a worker after the file is uploaded
+ return {
+ [file.type]: {
+ content: uri,
+ remote: true,
+ hash: {
+ sha256: hash,
+ },
+ width,
+ height,
+ description: options?.description,
+ size: file.size,
+ },
+ };
+ }
+
+ public toApiMeta(): ApiAttachment["meta"] {
+ const type = this.getPreferredMimeType();
+ const data = this.data.content[type];
+ const size =
+ data.width && data.height
+ ? `${data.width}x${data.height}`
+ : undefined;
+ const aspect =
+ data.width && data.height ? data.width / data.height : undefined;
+
+ return {
+ width: data.width || undefined,
+ height: data.height || undefined,
+ fps: data.fps || undefined,
+ size,
+ // Idk whether size or length is the right value
+ duration: data.duration || undefined,
+ // Versia doesn't have a concept of length in ContentFormat
+ length: undefined,
+ aspect,
+ original: {
+ width: data.width || undefined,
+ height: data.height || undefined,
+ size,
+ aspect,
+ },
+ };
+ }
+
+ public toApi(): ApiAttachment {
+ const type = this.getPreferredMimeType();
+ const data = this.data.content[type];
+
+ // Thumbnail should only have a single MIME type
+ const thumbnailData =
+ this.data.thumbnail?.[Object.keys(this.data.thumbnail)[0]];
+
+ return {
+ id: this.data.id,
+ type: this.getMastodonType(),
+ url: proxyUrl(data.content) ?? "",
+ remote_url: null,
+ preview_url: proxyUrl(thumbnailData?.content),
+ text_url: null,
+ meta: this.toApiMeta(),
+ description: data.description || null,
+ blurhash: this.data.blurhash,
+ };
+ }
+
+ public toVersia(): ContentFormat {
+ return this.data.content;
+ }
+
+ public static fromVersia(contentFormat: ContentFormat): Promise {
+ return Media.insert({
+ content: contentFormat,
+ originalContent: contentFormat,
+ });
+ }
+}
diff --git a/classes/database/note.ts b/classes/database/note.ts
index b732b70c..e8ce756f 100644
--- a/classes/database/note.ts
+++ b/classes/database/note.ts
@@ -17,7 +17,7 @@ import type {
import { Instance, db } from "@versia/kit/db";
import {
EmojiToNote,
- Medias,
+ MediasToNotes,
NoteToMentions,
Notes,
Users,
@@ -44,9 +44,9 @@ import {
import { config } from "~/packages/config-manager";
import { DeliveryJobType, deliveryQueue } from "../queues/delivery.ts";
import { Application } from "./application.ts";
-import { Media } from "./attachment.ts";
import { BaseInterface } from "./base.ts";
import { Emoji } from "./emoji.ts";
+import { Media } from "./media.ts";
import { User } from "./user.ts";
type NoteType = InferSelectModel;
@@ -630,22 +630,15 @@ export class Note extends BaseInterface {
// Remove old attachments
await db
- .update(Medias)
- .set({
- noteId: null,
- })
- .where(eq(Medias.noteId, this.data.id));
- await db
- .update(Medias)
- .set({
+ .delete(MediasToNotes)
+ .where(eq(MediasToNotes.noteId, this.data.id));
+
+ await db.insert(MediasToNotes).values(
+ mediaAttachments.map((media) => ({
noteId: this.data.id,
- })
- .where(
- inArray(
- Medias.id,
- mediaAttachments.map((i) => i.id),
- ),
- );
+ mediaId: media.id,
+ })),
+ );
}
/**
diff --git a/classes/database/notification.ts b/classes/database/notification.ts
index 79374e27..ebe3fae9 100644
--- a/classes/database/notification.ts
+++ b/classes/database/notification.ts
@@ -10,8 +10,6 @@ import {
inArray,
} from "drizzle-orm";
import { z } from "zod";
-import { MediaBackendType } from "~/packages/config-manager/config.type";
-import { config } from "~/packages/config-manager/index.ts";
import {
transformOutputToUserWithRelations,
userExtrasTemplate,
@@ -215,16 +213,6 @@ export class Notification extends BaseInterface<
return this.data.id;
}
- public static getUrl(name: string): string {
- if (config.media.backend === MediaBackendType.Local) {
- return new URL(`/media/${name}`, config.http.base_url).toString();
- }
- if (config.media.backend === MediaBackendType.S3) {
- return new URL(`/${name}`, config.s3.public_url).toString();
- }
- return "";
- }
-
public async toApi(): Promise {
const account = new User(this.data.account);
diff --git a/classes/database/reaction.ts b/classes/database/reaction.ts
index 373b4382..e7e0a23a 100644
--- a/classes/database/reaction.ts
+++ b/classes/database/reaction.ts
@@ -67,6 +67,7 @@ export class Reaction extends BaseInterface {
emoji: {
with: {
instance: true,
+ media: true,
},
},
author: true,
@@ -98,6 +99,7 @@ export class Reaction extends BaseInterface {
emoji: {
with: {
instance: true,
+ media: true,
},
},
author: true,
diff --git a/classes/database/user.ts b/classes/database/user.ts
index 882a4b72..261e3a7e 100644
--- a/classes/database/user.ts
+++ b/classes/database/user.ts
@@ -21,7 +21,7 @@ import type {
FollowReject as VersiaFollowReject,
User as VersiaUser,
} from "@versia/federation/types";
-import { Notification, PushSubscription, db } from "@versia/kit/db";
+import { Media, Notification, PushSubscription, db } from "@versia/kit/db";
import {
EmojiToUser,
Likes,
@@ -69,6 +69,8 @@ type UserWithInstance = InferSelectModel & {
type UserWithRelations = UserWithInstance & {
emojis: (typeof Emoji.$type)[];
+ avatar: typeof Media.$type | null;
+ header: typeof Media.$type | null;
followerCount: number;
followingCount: number;
statusCount: number;
@@ -149,6 +151,16 @@ export class User extends BaseInterface {
public static $type: UserWithRelations;
+ public avatar: Media | null;
+ public header: Media | null;
+
+ public constructor(data: UserWithRelations) {
+ super(data);
+
+ this.avatar = data.avatar ? new Media(data.avatar) : null;
+ this.header = data.header ? new Media(data.header) : null;
+ }
+
public async reload(): Promise {
const reloaded = await User.fromId(this.data.id);
@@ -728,9 +740,6 @@ export class User extends BaseInterface {
user: VersiaUser,
instance: Instance,
): Promise {
- const avatar = user.avatar ? Object.entries(user.avatar)[0] : null;
- const header = user.header ? Object.entries(user.header)[0] : null;
-
const data = {
username: user.username,
uri: user.uri,
@@ -748,8 +757,6 @@ export class User extends BaseInterface {
fields: user.fields ?? [],
updatedAt: new Date(user.created_at).toISOString(),
instanceId: instance.id,
- avatar: avatar?.[1].content || "",
- header: header?.[1].content || "",
displayName: user.display_name ?? "",
note: getBestContentType(user.bio).content,
publicKey: user.public_key.key,
@@ -759,16 +766,6 @@ export class User extends BaseInterface {
privacy: "public",
sensitive: false,
fields: [],
- avatar: avatar
- ? {
- content_type: avatar[0],
- }
- : undefined,
- header: header
- ? {
- content_type: header[0],
- }
- : undefined,
},
};
@@ -784,14 +781,65 @@ export class User extends BaseInterface {
// If it exists, simply update it
if (foundUser) {
- await foundUser.update(data);
+ let avatar: Media | null = null;
+ let header: Media | null = null;
+
+ if (user.avatar) {
+ if (foundUser.avatar) {
+ avatar = new Media(
+ await foundUser.avatar.update({
+ content: user.avatar,
+ }),
+ );
+ } else {
+ avatar = await Media.insert({
+ content: user.avatar,
+ });
+ }
+ }
+
+ if (user.header) {
+ if (foundUser.header) {
+ header = new Media(
+ await foundUser.header.update({
+ content: user.header,
+ }),
+ );
+ } else {
+ header = await Media.insert({
+ content: user.header,
+ });
+ }
+ }
+
+ await foundUser.update({
+ ...data,
+ avatarId: avatar?.id,
+ headerId: header?.id,
+ });
await foundUser.updateEmojis(emojis);
return foundUser;
}
// Else, create a new user
- const newUser = await User.insert(data);
+ const avatar = user.avatar
+ ? await Media.insert({
+ content: user.avatar,
+ })
+ : null;
+
+ const header = user.header
+ ? await Media.insert({
+ content: user.header,
+ })
+ : null;
+
+ const newUser = await User.insert({
+ ...data,
+ avatarId: avatar?.id,
+ headerId: header?.id,
+ });
await newUser.updateEmojis(emojis);
return newUser;
@@ -846,13 +894,13 @@ export class User extends BaseInterface {
* @returns The raw URL for the user's avatar
*/
public getAvatarUrl(config: Config): string {
- if (!this.data.avatar) {
+ if (!this.avatar) {
return (
config.defaults.avatar ||
`https://api.dicebear.com/8.x/${config.defaults.placeholder_style}/svg?seed=${this.data.username}`
);
}
- return this.data.avatar;
+ return this.avatar?.getUrl();
}
public static async generateKeys(): Promise<{
@@ -886,14 +934,8 @@ export class User extends BaseInterface {
password: string | undefined;
email: string | undefined;
bio?: string;
- avatar?: {
- url: string;
- content_type: string;
- };
- header?: {
- url: string;
- content_type: string;
- };
+ avatar?: Media;
+ header?: Media;
admin?: boolean;
skipPasswordHash?: boolean;
}): Promise {
@@ -911,8 +953,8 @@ export class User extends BaseInterface {
: await Bun.password.hash(data.password),
email: data.email,
note: data.bio ?? "",
- avatar: data.avatar?.url ?? config.defaults.avatar ?? "",
- header: data.header?.url ?? config.defaults.avatar ?? "",
+ avatarId: data.avatar?.id,
+ headerId: data.header?.id,
isAdmin: data.admin ?? false,
publicKey: keys.public_key,
fields: [],
@@ -924,16 +966,6 @@ export class User extends BaseInterface {
privacy: "public",
sensitive: false,
fields: [],
- avatar: data.avatar
- ? {
- content_type: data.avatar.content_type,
- }
- : undefined,
- header: data.header
- ? {
- content_type: data.header.content_type,
- }
- : undefined,
},
})
.returning()
@@ -957,10 +989,10 @@ export class User extends BaseInterface {
* @returns The raw URL for the user's header
*/
public getHeaderUrl(config: Config): string {
- if (!this.data.header) {
+ if (!this.header) {
return config.defaults.header || "";
}
- return this.data.header;
+ return this.header.getUrl();
}
public getAcct(): string {
diff --git a/classes/functions/status.ts b/classes/functions/status.ts
index 9b7f118a..c00b9c4a 100644
--- a/classes/functions/status.ts
+++ b/classes/functions/status.ts
@@ -38,12 +38,17 @@ export const findManyNotes = async (
...query,
with: {
...query?.with,
- attachments: true,
+ attachments: {
+ with: {
+ media: true,
+ },
+ },
emojis: {
with: {
emoji: {
with: {
instance: true,
+ media: true,
},
},
},
@@ -65,12 +70,17 @@ export const findManyNotes = async (
},
reblog: {
with: {
- attachments: true,
+ attachments: {
+ with: {
+ media: true,
+ },
+ },
emojis: {
with: {
emoji: {
with: {
instance: true,
+ media: true,
},
},
},
@@ -176,6 +186,7 @@ export const findManyNotes = async (
...mention.user,
endpoints: mention.user.endpoints,
})),
+ attachments: post.attachments.map((attachment) => attachment.media),
emojis: (post.emojis ?? []).map((emoji) => emoji.emoji),
reblog: post.reblog && {
...post.reblog,
@@ -184,6 +195,9 @@ export const findManyNotes = async (
...mention.user,
endpoints: mention.user.endpoints,
})),
+ attachments: post.reblog.attachments.map(
+ (attachment) => attachment.media,
+ ),
emojis: (post.reblog.emojis ?? []).map((emoji) => emoji.emoji),
reblogCount: Number(post.reblog.reblogCount),
likeCount: Number(post.reblog.likeCount),
diff --git a/classes/functions/user.ts b/classes/functions/user.ts
index 476daa5f..571eff7f 100644
--- a/classes/functions/user.ts
+++ b/classes/functions/user.ts
@@ -2,6 +2,7 @@ import {
type Application,
type Emoji,
type Instance,
+ type Media,
type Role,
type Token,
type User,
@@ -17,10 +18,13 @@ export const userRelations = {
emoji: {
with: {
instance: true,
+ media: true,
},
},
},
},
+ avatar: true,
+ header: true,
roles: {
with: {
role: true,
@@ -75,6 +79,8 @@ export const transformOutputToUserWithRelations = (
followerCount: unknown;
followingCount: unknown;
statusCount: unknown;
+ avatar: typeof Media.$type | null;
+ header: typeof Media.$type | null;
emojis: {
userId: string;
emojiId: string;
diff --git a/classes/media/drivers/disk.test.ts b/classes/media/drivers/disk.test.ts
deleted file mode 100644
index 60e15dab..00000000
--- a/classes/media/drivers/disk.test.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * @packageDocumentation
- * @module Tests/DiskMediaDriver
- */
-
-import {
- type Mock,
- beforeEach,
- describe,
- expect,
- it,
- mock,
- spyOn,
-} from "bun:test";
-import { rm } from "node:fs/promises";
-import { join } from "node:path";
-import type { Config } from "~/packages/config-manager/config.type";
-import type { getMediaHash } from "../media-hasher.ts";
-import { DiskMediaDriver } from "./disk.ts";
-
-describe("DiskMediaDriver", () => {
- let diskDriver: DiskMediaDriver;
- let mockConfig: Config;
- let mockMediaHasher: Mock;
- let bunWriteSpy: Mock;
-
- beforeEach(() => {
- mockConfig = {
- media: {
- local_uploads_folder: "/test/uploads",
- },
- http: {
- base_url: "http://localhost:3000",
- },
- } as Config;
-
- mockMediaHasher = mock(() => Promise.resolve("testhash"));
-
- mock.module("../media-hasher", () => ({
- getMediaHash: mockMediaHasher,
- }));
-
- diskDriver = new DiskMediaDriver(mockConfig);
- // @ts-expect-error: Replacing private property for testing
- diskDriver.mediaHasher = mockMediaHasher;
-
- // Mock fs.promises methods
- mock.module("node:fs/promises", () => ({
- writeFile: mock(() => Promise.resolve()),
- rm: mock(() => {
- return Promise.resolve();
- }),
- }));
-
- spyOn(Bun, "file").mockImplementation(
- mock(() => ({
- exists: mock(() => Promise.resolve(true)),
- arrayBuffer: mock(() => Promise.resolve(new ArrayBuffer(8))),
- type: "image/webp",
- lastModified: Date.now(),
- })) as unknown as typeof Bun.file,
- );
-
- bunWriteSpy = spyOn(Bun, "write").mockImplementation(
- mock(() => Promise.resolve(0)),
- );
- });
-
- it("should add a file", async () => {
- const file = new File(["test"], "test.webp", { type: "image/webp" });
- const result = await diskDriver.addFile(file);
-
- expect(mockMediaHasher).toHaveBeenCalledWith(file);
- expect(bunWriteSpy).toHaveBeenCalledWith(
- join("/test/uploads", "testhash", "test.webp"),
- expect.any(ArrayBuffer),
- );
- expect(result).toEqual({
- uploadedFile: file,
- path: join("testhash", "test.webp"),
- hash: "testhash",
- });
- });
-
- it("should properly handle a Blob instead of a File", async () => {
- const file = new Blob(["test"], { type: "image/webp" });
- const result = await diskDriver.addFile(file as File);
-
- expect(mockMediaHasher).toHaveBeenCalledWith(file);
- expect(bunWriteSpy).toHaveBeenCalledWith(
- expect.stringContaining("testhash"),
- expect.any(ArrayBuffer),
- );
- expect(result).toEqual({
- uploadedFile: expect.any(Blob),
- path: expect.stringContaining("testhash"),
- hash: "testhash",
- });
- });
-
- it("should get a file by hash", async () => {
- const hash = "testhash";
- const databaseHashFetcher = mock(() => Promise.resolve("test.webp"));
- const result = await diskDriver.getFileByHash(
- hash,
- databaseHashFetcher,
- );
-
- expect(databaseHashFetcher).toHaveBeenCalledWith(hash);
- expect(Bun.file).toHaveBeenCalledWith(
- join("/test/uploads", "test.webp"),
- );
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe("test.webp");
- expect(result?.type).toBe("image/webp");
- });
-
- it("should get a file by filename", async () => {
- const filename = "test.webp";
- const result = await diskDriver.getFile(filename);
-
- expect(Bun.file).toHaveBeenCalledWith(join("/test/uploads", filename));
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe(filename);
- expect(result?.type).toBe("image/webp");
- });
-
- it("should delete a file by URL", async () => {
- const url = "http://localhost:3000/uploads/testhash/test.webp";
- await diskDriver.deleteFileByUrl(url);
-
- expect(rm).toHaveBeenCalledWith(join("/test/uploads", "testhash"), {
- recursive: true,
- });
- });
-});
diff --git a/classes/media/drivers/disk.ts b/classes/media/drivers/disk.ts
deleted file mode 100644
index 5e380ed1..00000000
--- a/classes/media/drivers/disk.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * @packageDocumentation
- * @module MediaManager/Drivers
- */
-
-import { rm } from "node:fs/promises";
-import { join } from "node:path";
-import type { Config } from "~/packages/config-manager/config.type";
-import { getMediaHash } from "../media-hasher.ts";
-import type { UploadedFileMetadata } from "../media-manager.ts";
-import type { MediaDriver } from "./media-driver.ts";
-
-/**
- * Implements the MediaDriver interface for disk storage.
- */
-export class DiskMediaDriver implements MediaDriver {
- /**
- * Creates a new DiskMediaDriver instance.
- * @param config - The configuration object.
- */
- public constructor(private config: Config) {}
-
- /**
- * @inheritdoc
- */
- public async addFile(
- file: File,
- ): Promise> {
- // Sometimes the file name is not available, so we generate a random name
- const fileName = file.name ?? crypto.randomUUID();
-
- const hash = await getMediaHash(file);
- const path = join(hash, fileName);
- const fullPath = join(this.config.media.local_uploads_folder, path);
-
- await Bun.write(fullPath, await file.arrayBuffer());
-
- return {
- uploadedFile: file,
- path,
- hash,
- };
- }
-
- /**
- * @inheritdoc
- */
- public async getFileByHash(
- hash: string,
- databaseHashFetcher: (sha256: string) => Promise,
- ): Promise {
- const filename = await databaseHashFetcher(hash);
- if (!filename) {
- return null;
- }
- return this.getFile(filename);
- }
-
- /**
- * @inheritdoc
- */
- public async getFile(filename: string): Promise {
- const fullPath = join(this.config.media.local_uploads_folder, filename);
- try {
- const file = Bun.file(fullPath);
- if (await file.exists()) {
- return new File([await file.arrayBuffer()], filename, {
- type: file.type,
- lastModified: file.lastModified,
- });
- }
- } catch {
- // File doesn't exist or can't be read
- }
- return null;
- }
-
- /**
- * @inheritdoc
- */
- public async deleteFileByUrl(url: string): Promise {
- const urlObj = new URL(url);
-
- // Check if URL is from the local uploads folder
- if (urlObj.host !== new URL(this.config.http.base_url).host) {
- return Promise.resolve();
- }
-
- const hash = urlObj.pathname.split("/").at(-2);
- if (!hash) {
- throw new Error("Invalid URL");
- }
- const dirPath = join(this.config.media.local_uploads_folder, hash);
- await rm(dirPath, { recursive: true });
- }
-}
diff --git a/classes/media/drivers/media-driver.ts b/classes/media/drivers/media-driver.ts
deleted file mode 100644
index f137de56..00000000
--- a/classes/media/drivers/media-driver.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @packageDocumentation
- * @module MediaManager/Drivers
- */
-
-import type { UploadedFileMetadata } from "../media-manager.ts";
-
-/**
- * Represents a media storage driver.
- */
-export interface MediaDriver {
- /**
- * Adds a file to the media storage.
- * @param file - The file to add.
- * @returns A promise that resolves to the metadata of the uploaded file.
- */
- addFile(file: File): Promise>;
-
- /**
- * Retrieves a file from the media storage by its hash.
- * @param hash - The hash of the file to retrieve.
- * @param databaseHashFetcher - A function to fetch the filename from the database.
- * @returns A promise that resolves to the file or null if not found.
- */
- getFileByHash(
- hash: string,
- databaseHashFetcher: (sha256: string) => Promise,
- ): Promise;
-
- /**
- * Retrieves a file from the media storage by its filename.
- * @param filename - The name of the file to retrieve.
- * @returns A promise that resolves to the file or null if not found.
- */
- getFile(filename: string): Promise;
-
- /**
- * Deletes a file from the media storage by its URL.
- * @param url - The URL of the file to delete.
- * @returns A promise that resolves when the file is deleted.
- */
- deleteFileByUrl(url: string): Promise;
-}
diff --git a/classes/media/drivers/s3.test.ts b/classes/media/drivers/s3.test.ts
deleted file mode 100644
index ca02d479..00000000
--- a/classes/media/drivers/s3.test.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * @packageDocumentation
- * @module Tests/S3MediaDriver
- */
-
-import { type Mock, beforeEach, describe, expect, it, mock } from "bun:test";
-import type { S3Client } from "@bradenmacdonald/s3-lite-client";
-import type { Config } from "~/packages/config-manager/config.type";
-import type { getMediaHash } from "../media-hasher.ts";
-import { S3MediaDriver } from "./s3.ts";
-
-describe("S3MediaDriver", () => {
- let s3Driver: S3MediaDriver;
- let mockConfig: Config;
- let mockS3Client: S3Client;
- let mockMediaHasher: Mock;
-
- beforeEach(() => {
- mockConfig = {
- s3: {
- endpoint: "s3.amazonaws.com",
- region: "us-west-2",
- bucket_name: "test-bucket",
- access_key: "test-key",
- secret_access_key: "test-secret",
- },
- } as Config;
-
- mockS3Client = mock(() => ({
- putObject: mock(() => Promise.resolve()),
- getObject: mock(() =>
- Promise.resolve({
- arrayBuffer: (): Promise =>
- Promise.resolve(new ArrayBuffer(8)),
- headers: new Headers({ "Content-Type": "image/webp" }),
- }),
- ),
- statObject: mock(() => Promise.resolve()),
- deleteObject: mock(() => Promise.resolve()),
- }))() as unknown as S3Client;
-
- mockMediaHasher = mock(() => Promise.resolve("testhash"));
-
- mock.module("../media-hasher", () => ({
- getMediaHash: mockMediaHasher,
- }));
-
- s3Driver = new S3MediaDriver(mockConfig);
- // @ts-expect-error: Replacing private property for testing
- s3Driver.s3Client = mockS3Client;
- // @ts-expect-error: Replacing private property for testing
- s3Driver.mediaHasher = mockMediaHasher;
- });
-
- it("should add a file", async () => {
- const file = new File(["test"], "test.webp", { type: "image/webp" });
- const result = await s3Driver.addFile(file);
-
- expect(mockMediaHasher).toHaveBeenCalledWith(file);
- expect(mockS3Client.putObject).toHaveBeenCalledWith(
- "testhash/test.webp",
- expect.any(ReadableStream),
- { size: file.size, metadata: { "Content-Type": file.type } },
- );
- expect(result).toEqual({
- uploadedFile: file,
- path: "testhash/test.webp",
- hash: "testhash",
- });
- });
-
- it("should handle a Blob instead of a File", async () => {
- const file = new Blob(["test"], { type: "image/webp" });
- const result = await s3Driver.addFile(file as File);
-
- expect(mockMediaHasher).toHaveBeenCalledWith(file);
- expect(mockS3Client.putObject).toHaveBeenCalledWith(
- expect.stringContaining("testhash"),
- expect.any(ReadableStream),
- {
- size: file.size,
- metadata: {
- "Content-Type": file.type,
- },
- },
- );
- expect(result).toEqual({
- uploadedFile: expect.any(Blob),
- path: expect.stringContaining("testhash"),
- hash: "testhash",
- });
- });
-
- it("should get a file by hash", async () => {
- const hash = "testhash";
- const databaseHashFetcher = mock(() => Promise.resolve("test.webp"));
- const result = await s3Driver.getFileByHash(hash, databaseHashFetcher);
-
- expect(databaseHashFetcher).toHaveBeenCalledWith(hash);
- expect(mockS3Client.statObject).toHaveBeenCalledWith("test.webp");
- expect(mockS3Client.getObject).toHaveBeenCalledWith("test.webp");
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe("test.webp");
- expect(result?.type).toBe("image/webp");
- });
-
- it("should get a file by filename", async () => {
- const filename = "test.webp";
- const result = await s3Driver.getFile(filename);
-
- expect(mockS3Client.statObject).toHaveBeenCalledWith(filename);
- expect(mockS3Client.getObject).toHaveBeenCalledWith(filename);
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe(filename);
- expect(result?.type).toBe("image/webp");
- });
-
- it("should delete a file by URL", async () => {
- const url = "https://test-bucket.s3.amazonaws.com/test/test.webp";
- await s3Driver.deleteFileByUrl(url);
-
- expect(mockS3Client.deleteObject).toHaveBeenCalledWith(
- "test/test.webp",
- );
- });
-});
diff --git a/classes/media/drivers/s3.ts b/classes/media/drivers/s3.ts
deleted file mode 100644
index 21e93d19..00000000
--- a/classes/media/drivers/s3.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @packageDocumentation
- * @module MediaManager/Drivers
- */
-
-import { S3Client } from "@bradenmacdonald/s3-lite-client";
-import type { Config } from "~/packages/config-manager/config.type";
-import { getMediaHash } from "../media-hasher.ts";
-import type { UploadedFileMetadata } from "../media-manager.ts";
-import type { MediaDriver } from "./media-driver.ts";
-
-/**
- * Implements the MediaDriver interface for S3 storage.
- */
-export class S3MediaDriver implements MediaDriver {
- private s3Client: S3Client;
-
- /**
- * Creates a new S3MediaDriver instance.
- * @param config - The configuration object.
- */
- public constructor(config: Config) {
- this.s3Client = new S3Client({
- endPoint: config.s3.endpoint,
- useSSL: true,
- region: config.s3.region || "auto",
- bucket: config.s3.bucket_name,
- accessKey: config.s3.access_key,
- secretKey: config.s3.secret_access_key,
- });
- }
-
- /**
- * @inheritdoc
- */
- public async addFile(
- file: File,
- ): Promise> {
- // Sometimes the file name is not available, so we generate a random name
- const fileName = file.name ?? crypto.randomUUID();
-
- const hash = await getMediaHash(file);
- const path = `${hash}/${fileName}`;
-
- await this.s3Client.putObject(path, file.stream(), {
- size: file.size,
- metadata: {
- "Content-Type": file.type,
- },
- });
-
- return {
- uploadedFile: file,
- path,
- hash,
- };
- }
-
- /**
- * @inheritdoc
- */
- public async getFileByHash(
- hash: string,
- databaseHashFetcher: (sha256: string) => Promise,
- ): Promise {
- const filename = await databaseHashFetcher(hash);
- if (!filename) {
- return null;
- }
- return this.getFile(filename);
- }
-
- /**
- * @inheritdoc
- */
- public async getFile(filename: string): Promise {
- try {
- await this.s3Client.statObject(filename);
- const file = await this.s3Client.getObject(filename);
- const arrayBuffer = await file.arrayBuffer();
- return new File([arrayBuffer], filename, {
- type: file.headers.get("Content-Type") || undefined,
- });
- } catch {
- return null;
- }
- }
-
- /**
- * @inheritdoc
- */
- public async deleteFileByUrl(url: string): Promise {
- const urlObj = new URL(url);
- const path = urlObj.pathname.slice(1); // Remove leading slash
- await this.s3Client.deleteObject(path);
- }
-}
diff --git a/classes/media/media-manager.test.ts b/classes/media/media-manager.test.ts
deleted file mode 100644
index 11503665..00000000
--- a/classes/media/media-manager.test.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * @packageDocumentation
- * @module Tests/MediaManager
- */
-
-import { beforeEach, describe, expect, it, mock } from "bun:test";
-import type { Config } from "~/packages/config-manager/config.type";
-import { MediaBackendType } from "~/packages/config-manager/config.type";
-import { DiskMediaDriver } from "./drivers/disk.ts";
-import { S3MediaDriver } from "./drivers/s3.ts";
-import { MediaManager } from "./media-manager.ts";
-import type { ImageConversionPreprocessor } from "./preprocessors/image-conversion.ts";
-
-describe("MediaManager", () => {
- let mediaManager: MediaManager;
- let mockConfig: Config;
- let mockS3Driver: S3MediaDriver;
- let mockImagePreprocessor: ImageConversionPreprocessor;
-
- beforeEach(() => {
- mockConfig = {
- media: {
- backend: "s3",
- conversion: {
- convert_images: true,
- convert_to: "image/webp",
- },
- },
- s3: {
- endpoint: "s3.amazonaws.com",
- region: "us-west-2",
- bucket_name: "test-bucket",
- access_key: "test-key",
- secret_access_key: "test-secret",
- },
- } as Config;
-
- mockS3Driver = mock(() => ({
- addFile: mock(() =>
- Promise.resolve({
- uploadedFile: new File(["hey"], "test.webp"),
- path: "test/test.webp",
- hash: "testhash",
- }),
- ),
- getFileByHash: mock(() => {
- return Promise.resolve(new File(["hey"], "test.webp"));
- }),
- getFile: mock(() =>
- Promise.resolve(new File(["hey"], "test.webp")),
- ),
- deleteFileByUrl: mock(() => Promise.resolve()),
- }))() as unknown as S3MediaDriver;
-
- mockImagePreprocessor = mock(() => ({
- process: mock((_: File) =>
- Promise.resolve(new File(["hey"], "test.webp")),
- ),
- }))() as unknown as ImageConversionPreprocessor;
-
- mediaManager = new MediaManager(mockConfig);
- // @ts-expect-error: Accessing private property for testing
- mediaManager.driver = mockS3Driver;
- // @ts-expect-error: Accessing private property for testing
- mediaManager.preprocessors = [mockImagePreprocessor];
- });
-
- it("should initialize with the correct driver based on config", () => {
- const s3Manager = new MediaManager(mockConfig);
- // @ts-expect-error: Accessing private property for testing
- expect(s3Manager.driver).toBeInstanceOf(S3MediaDriver);
-
- mockConfig.media.backend = MediaBackendType.Local;
- const diskManager = new MediaManager(mockConfig);
- // @ts-expect-error: Accessing private property for testing
- expect(diskManager.driver).toBeInstanceOf(DiskMediaDriver);
- });
-
- it("should add a file with preprocessing", async () => {
- const file = new File(["test"], "test.jpg", { type: "image/jpeg" });
- const result = await mediaManager.addFile(file);
-
- expect(mockImagePreprocessor.process).toHaveBeenCalledWith(file);
- expect(mockS3Driver.addFile).toHaveBeenCalled();
- expect(result).toEqual({
- uploadedFile: new File(["hey"], "test.webp"),
- path: "test/test.webp",
- hash: "testhash",
- });
- });
-
- it("should get a file by hash", async () => {
- const hash = "testhash";
- const databaseHashFetcher = mock(() => Promise.resolve("test.webp"));
- const result = await mediaManager.getFileByHash(
- hash,
- databaseHashFetcher,
- );
-
- expect(mockS3Driver.getFileByHash).toHaveBeenCalledWith(
- hash,
- databaseHashFetcher,
- );
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe("test.webp");
- });
-
- it("should get a file by filename", async () => {
- const filename = "test.webp";
- const result = await mediaManager.getFile(filename);
-
- expect(mockS3Driver.getFile).toHaveBeenCalledWith(filename);
- expect(result).toBeInstanceOf(File);
- expect(result?.name).toBe("test.webp");
- });
-
- it("should delete a file by URL", async () => {
- const url = "https://test-bucket.s3.amazonaws.com/test/test.webp";
- await mediaManager.deleteFileByUrl(url);
-
- expect(mockS3Driver.deleteFileByUrl).toHaveBeenCalledWith(url);
- });
-});
diff --git a/classes/media/media-manager.ts b/classes/media/media-manager.ts
deleted file mode 100644
index 5ffccab0..00000000
--- a/classes/media/media-manager.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * @packageDocumentation
- * @module MediaManager
- */
-
-import type { Config } from "~/packages/config-manager/config.type";
-import { DiskMediaDriver } from "./drivers/disk.ts";
-import type { MediaDriver } from "./drivers/media-driver.ts";
-import { S3MediaDriver } from "./drivers/s3.ts";
-import type { MediaPreprocessor } from "./preprocessors/media-preprocessor.ts";
-
-/**
- * Manages media operations with support for different storage drivers and preprocessing plugins.
- * @example
- * const mediaManager = new MediaManager(config);
- *
- * const file = new File(["hello"], "hello.txt");
- *
- * const { path, hash, blurhash } = await mediaManager.addFile(file);
- *
- * const retrievedFile = await mediaManager.getFileByHash(hash, fetchHashFromDatabase);
- *
- * await mediaManager.deleteFileByUrl(path);
- */
-export class MediaManager {
- private driver: MediaDriver;
- private preprocessors: MediaPreprocessor[] = [];
-
- /**
- * Creates a new MediaManager instance.
- * @param config - The configuration object.
- */
- public constructor(private config: Config) {
- this.driver = this.initializeDriver();
- }
-
- /**
- * Initializes the appropriate media driver based on the configuration.
- * @returns An instance of MediaDriver.
- */
- private initializeDriver(): MediaDriver {
- switch (this.config.media.backend) {
- case "s3":
- return new S3MediaDriver(this.config);
- case "local":
- return new DiskMediaDriver(this.config);
- default:
- throw new Error(
- `Unsupported media backend: ${this.config.media.backend}`,
- );
- }
- }
-
- /**
- * Adds a file to the media storage.
- * @param file - The file to add.
- * @returns A promise that resolves to the metadata of the uploaded file.
- */
- public async addFile(file: File): Promise {
- let processedFile = file;
-
- for (const preprocessor of this.preprocessors) {
- const result = await preprocessor.process(processedFile);
-
- processedFile = result.file;
- }
-
- const uploadResult = await this.driver.addFile(processedFile);
-
- return uploadResult;
- }
- /**
- * Retrieves a file from the media storage by its hash.
- * @param hash - The hash of the file to retrieve.
- * @param databaseHashFetcher - A function to fetch the filename from the database.
- * @returns A promise that resolves to the file or null if not found.
- */
- public getFileByHash(
- hash: string,
- databaseHashFetcher: (sha256: string) => Promise,
- ): Promise {
- return this.driver.getFileByHash(hash, databaseHashFetcher);
- }
-
- /**
- * Retrieves a file from the media storage by its filename.
- * @param filename - The name of the file to retrieve.
- * @returns A promise that resolves to the file or null if not found.
- */
- public getFile(filename: string): Promise {
- return this.driver.getFile(filename);
- }
-
- /**
- * Deletes a file from the media storage by its URL.
- * @param url - The URL of the file to delete.
- * @returns A promise that resolves when the file is deleted.
- */
- public deleteFileByUrl(url: string): Promise {
- return this.driver.deleteFileByUrl(url);
- }
-}
-
-/**
- * Represents the metadata of an uploaded file.
- */
-export interface UploadedFileMetadata {
- uploadedFile: File;
- path: string;
- hash: string;
-}
diff --git a/classes/media/preprocessors/blurhash.test.ts b/classes/media/preprocessors/blurhash.test.ts
index ce89f4df..c2f5013d 100644
--- a/classes/media/preprocessors/blurhash.test.ts
+++ b/classes/media/preprocessors/blurhash.test.ts
@@ -1,14 +1,8 @@
-import { beforeEach, describe, expect, it, mock } from "bun:test";
+import { describe, expect, it, mock } from "bun:test";
import sharp from "sharp";
-import { BlurhashPreprocessor } from "./blurhash.ts";
+import { calculateBlurhash } from "./blurhash.ts";
describe("BlurhashPreprocessor", () => {
- let preprocessor: BlurhashPreprocessor;
-
- beforeEach(() => {
- preprocessor = new BlurhashPreprocessor();
- });
-
it("should calculate blurhash for a valid image", async () => {
const inputBuffer = await sharp({
create: {
@@ -24,21 +18,19 @@ describe("BlurhashPreprocessor", () => {
const inputFile = new File([inputBuffer], "test.png", {
type: "image/png",
});
- const result = await preprocessor.process(inputFile);
+ const result = await calculateBlurhash(inputFile);
- expect(result.file).toBe(inputFile);
- expect(result.blurhash).toBeTypeOf("string");
- expect(result.blurhash).not.toBe("");
+ expect(result).toBeTypeOf("string");
+ expect(result).not.toBe("");
});
it("should return null blurhash for an invalid image", async () => {
const invalidFile = new File(["invalid image data"], "invalid.png", {
type: "image/png",
});
- const result = await preprocessor.process(invalidFile);
+ const result = await calculateBlurhash(invalidFile);
- expect(result.file).toBe(invalidFile);
- expect(result.blurhash).toBeNull();
+ expect(result).toBeNull();
});
it("should handle errors during blurhash calculation", async () => {
@@ -63,9 +55,8 @@ describe("BlurhashPreprocessor", () => {
},
}));
- const result = await preprocessor.process(inputFile);
+ const result = await calculateBlurhash(inputFile);
- expect(result.file).toBe(inputFile);
- expect(result.blurhash).toBeNull();
+ expect(result).toBeNull();
});
});
diff --git a/classes/media/preprocessors/blurhash.ts b/classes/media/preprocessors/blurhash.ts
index 527ed7b6..dff23491 100644
--- a/classes/media/preprocessors/blurhash.ts
+++ b/classes/media/preprocessors/blurhash.ts
@@ -1,44 +1,37 @@
import { encode } from "blurhash";
import sharp from "sharp";
-import type { MediaPreprocessor } from "./media-preprocessor.ts";
-export class BlurhashPreprocessor implements MediaPreprocessor {
- public async process(
- file: File,
- ): Promise<{ file: File; blurhash: string | null }> {
- try {
- const arrayBuffer = await file.arrayBuffer();
- const metadata = await sharp(arrayBuffer).metadata();
+export const calculateBlurhash = async (file: File): Promise => {
+ try {
+ const arrayBuffer = await file.arrayBuffer();
+ const metadata = await sharp(arrayBuffer).metadata();
- const blurhash = await new Promise((resolve) => {
- sharp(arrayBuffer)
- .raw()
- .ensureAlpha()
- .toBuffer((err, buffer) => {
- if (err) {
- resolve(null);
- return;
- }
+ return new Promise((resolve) => {
+ sharp(arrayBuffer)
+ .raw()
+ .ensureAlpha()
+ .toBuffer((err, buffer) => {
+ if (err) {
+ resolve(null);
+ return;
+ }
- try {
- resolve(
- encode(
- new Uint8ClampedArray(buffer),
- metadata?.width ?? 0,
- metadata?.height ?? 0,
- 4,
- 4,
- ) as string,
- );
- } catch {
- resolve(null);
- }
- });
- });
-
- return { file, blurhash };
- } catch {
- return { file, blurhash: null };
- }
+ try {
+ resolve(
+ encode(
+ new Uint8ClampedArray(buffer),
+ metadata?.width ?? 0,
+ metadata?.height ?? 0,
+ 4,
+ 4,
+ ) as string,
+ );
+ } catch {
+ resolve(null);
+ }
+ });
+ });
+ } catch {
+ return null;
}
-}
+};
diff --git a/classes/media/preprocessors/image-conversion.test.ts b/classes/media/preprocessors/image-conversion.test.ts
index d59c8336..b83061d1 100644
--- a/classes/media/preprocessors/image-conversion.test.ts
+++ b/classes/media/preprocessors/image-conversion.test.ts
@@ -1,10 +1,9 @@
-import { beforeEach, describe, expect, it } from "bun:test";
+import { beforeEach, describe, expect, it, mock } from "bun:test";
import sharp from "sharp";
import type { Config } from "~/packages/config-manager/config.type";
-import { ImageConversionPreprocessor } from "./image-conversion.ts";
+import { convertImage } from "./image-conversion.ts";
describe("ImageConversionPreprocessor", () => {
- let preprocessor: ImageConversionPreprocessor;
let mockConfig: Config;
beforeEach(() => {
@@ -18,7 +17,9 @@ describe("ImageConversionPreprocessor", () => {
},
} as Config;
- preprocessor = new ImageConversionPreprocessor(mockConfig);
+ mock.module("~/packages/config-manager/index.ts", () => ({
+ config: mockConfig,
+ }));
});
it("should convert a JPEG image to WebP", async () => {
@@ -36,12 +37,12 @@ describe("ImageConversionPreprocessor", () => {
const inputFile = new File([inputBuffer], "test.jpg", {
type: "image/jpeg",
});
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file.type).toBe("image/webp");
- expect(result.file.name).toBe("test.webp");
+ expect(result.type).toBe("image/webp");
+ expect(result.name).toBe("test.webp");
- const resultBuffer = await result.file.arrayBuffer();
+ const resultBuffer = await result.arrayBuffer();
const metadata = await sharp(resultBuffer).metadata();
expect(metadata.format).toBe("webp");
});
@@ -52,38 +53,36 @@ describe("ImageConversionPreprocessor", () => {
const inputFile = new File([svgContent], "test.svg", {
type: "image/svg+xml",
});
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file).toBe(inputFile);
+ expect(result).toBe(inputFile);
});
it("should convert SVG when convert_vector is true", async () => {
mockConfig.media.conversion.convert_vector = true;
- preprocessor = new ImageConversionPreprocessor(mockConfig);
const svgContent =
' ';
const inputFile = new File([svgContent], "test.svg", {
type: "image/svg+xml",
});
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file.type).toBe("image/webp");
- expect(result.file.name).toBe("test.webp");
+ expect(result.type).toBe("image/webp");
+ expect(result.name).toBe("test.webp");
});
it("should not convert unsupported file types", async () => {
const inputFile = new File(["test content"], "test.txt", {
type: "text/plain",
});
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file).toBe(inputFile);
+ expect(result).toBe(inputFile);
});
it("should throw an error for unsupported output format", async () => {
mockConfig.media.conversion.convert_to = "image/bmp";
- preprocessor = new ImageConversionPreprocessor(mockConfig);
const inputBuffer = await sharp({
create: {
@@ -100,7 +99,7 @@ describe("ImageConversionPreprocessor", () => {
type: "image/png",
});
- await expect(preprocessor.process(inputFile)).rejects.toThrow(
+ await expect(convertImage(inputFile)).rejects.toThrow(
"Unsupported output format: image/bmp",
);
});
@@ -121,12 +120,12 @@ describe("ImageConversionPreprocessor", () => {
const inputFile = new File([inputBuffer], "animated.gif", {
type: "image/gif",
});
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file.type).toBe("image/webp");
- expect(result.file.name).toBe("animated.webp");
+ expect(result.type).toBe("image/webp");
+ expect(result.name).toBe("animated.webp");
- const resultBuffer = await result.file.arrayBuffer();
+ const resultBuffer = await result.arrayBuffer();
const metadata = await sharp(resultBuffer).metadata();
expect(metadata.format).toBe("webp");
});
@@ -148,9 +147,9 @@ describe("ImageConversionPreprocessor", () => {
"test image with spaces.png",
{ type: "image/png" },
);
- const result = await preprocessor.process(inputFile);
+ const result = await convertImage(inputFile);
- expect(result.file.type).toBe("image/webp");
- expect(result.file.name).toBe("test image with spaces.webp");
+ expect(result.type).toBe("image/webp");
+ expect(result.name).toBe("test image with spaces.webp");
});
});
diff --git a/classes/media/preprocessors/image-conversion.ts b/classes/media/preprocessors/image-conversion.ts
index 88523cdc..a87c8fc2 100644
--- a/classes/media/preprocessors/image-conversion.ts
+++ b/classes/media/preprocessors/image-conversion.ts
@@ -4,8 +4,7 @@
*/
import sharp from "sharp";
-import type { Config } from "~/packages/config-manager/config.type";
-import type { MediaPreprocessor } from "./media-preprocessor.ts";
+import { config } from "~/packages/config-manager/index.ts";
/**
* Supported input media formats.
@@ -33,92 +32,73 @@ const supportedOutputFormats = [
];
/**
- * Implements the MediaPreprocessor interface for image conversion.
+ * Checks if a file is convertible.
+ * @param file - The file to check.
+ * @returns True if the file is convertible, false otherwise.
*/
-export class ImageConversionPreprocessor implements MediaPreprocessor {
- /**
- * Creates a new ImageConversionPreprocessor instance.
- * @param config - The configuration object.
- */
- public constructor(private config: Config) {}
+const isConvertible = (file: File): boolean => {
+ if (
+ file.type === "image/svg+xml" &&
+ !config.media.conversion.convert_vector
+ ) {
+ return false;
+ }
+ return supportedInputFormats.includes(file.type);
+};
- /**
- * @inheritdoc
- */
- public async process(file: File): Promise<{ file: File }> {
- if (!this.isConvertible(file)) {
- return { file };
- }
+/**
+ * Extracts the filename from a path.
+ * @param path - The path to extract the filename from.
+ * @returns The extracted filename.
+ */
+const extractFilenameFromPath = (path: string): string => {
+ const pathParts = path.split(/(?
+ extractFilenameFromPath(fileName).replace(/\.[^/.]+$/, `.${newExtension}`);
- const sharpCommand = sharp(await file.arrayBuffer(), {
- animated: true,
- });
- const commandName = targetFormat.split("/")[1] as
- | "jpeg"
- | "png"
- | "webp"
- | "avif"
- | "gif"
- | "tiff";
- const convertedBuffer = await sharpCommand[commandName]().toBuffer();
-
- return {
- file: new File(
- [convertedBuffer],
- ImageConversionPreprocessor.getReplacedFileName(
- file.name,
- commandName,
- ),
- {
- type: targetFormat,
- lastModified: Date.now(),
- },
- ),
- };
+/**
+ * Converts an image file to the format specified in the configuration.
+ *
+ * @param file - The image file to convert.
+ * @returns The converted image file.
+ */
+export const convertImage = async (file: File): Promise => {
+ if (!isConvertible(file)) {
+ return file;
}
- /**
- * Checks if a file is convertible.
- * @param file - The file to check.
- * @returns True if the file is convertible, false otherwise.
- */
- private isConvertible(file: File): boolean {
- if (
- file.type === "image/svg+xml" &&
- !this.config.media.conversion.convert_vector
- ) {
- return false;
- }
- return supportedInputFormats.includes(file.type);
+ const targetFormat = config.media.conversion.convert_to;
+ if (!supportedOutputFormats.includes(targetFormat)) {
+ throw new Error(`Unsupported output format: ${targetFormat}`);
}
- /**
- * Replaces the file extension in the filename.
- * @param fileName - The original filename.
- * @param newExtension - The new extension.
- * @returns The filename with the new extension.
- */
- private static getReplacedFileName(
- fileName: string,
- newExtension: string,
- ): string {
- return ImageConversionPreprocessor.extractFilenameFromPath(
- fileName,
- ).replace(/\.[^/.]+$/, `.${newExtension}`);
- }
+ const sharpCommand = sharp(await file.arrayBuffer(), {
+ animated: true,
+ });
+ const commandName = targetFormat.split("/")[1] as
+ | "jpeg"
+ | "png"
+ | "webp"
+ | "avif"
+ | "gif"
+ | "tiff";
+ const convertedBuffer = await sharpCommand[commandName]().toBuffer();
- /**
- * Extracts the filename from a path.
- * @param path - The path to extract the filename from.
- * @returns The extracted filename.
- */
- private static extractFilenameFromPath(path: string): string {
- const pathParts = path.split(/(?>;
-}
diff --git a/classes/queues/media.ts b/classes/queues/media.ts
index a9005eaf..e3177bf1 100644
--- a/classes/queues/media.ts
+++ b/classes/queues/media.ts
@@ -3,6 +3,7 @@ import { connection } from "~/utils/redis.ts";
export enum MediaJobType {
ConvertMedia = "convertMedia",
+ CalculateMetadata = "calculateMetadata",
}
export type MediaJobData = {
diff --git a/classes/workers/media.ts b/classes/workers/media.ts
index e42597ed..cb628616 100644
--- a/classes/workers/media.ts
+++ b/classes/workers/media.ts
@@ -2,9 +2,8 @@ import { Media } from "@versia/kit/db";
import { Worker } from "bullmq";
import { config } from "~/packages/config-manager";
import { connection } from "~/utils/redis.ts";
-import { MediaManager } from "../media/media-manager.ts";
-import { BlurhashPreprocessor } from "../media/preprocessors/blurhash.ts";
-import { ImageConversionPreprocessor } from "../media/preprocessors/image-conversion.ts";
+import { calculateBlurhash } from "../media/preprocessors/blurhash.ts";
+import { convertImage } from "../media/preprocessors/image-conversion.ts";
import {
type MediaJobData,
MediaJobType,
@@ -29,62 +28,72 @@ export const getMediaWorker = (): Worker =>
);
}
- const processor = new ImageConversionPreprocessor(config);
- const blurhashProcessor = new BlurhashPreprocessor();
-
- const hash = attachment?.data.sha256;
-
- if (!hash) {
- throw new Error(
- `Attachment [${attachmentId}] has no hash, cannot process.`,
- );
- }
-
await job.log(`Processing attachment [${attachmentId}]`);
await job.log(
- `Fetching file from [${attachment.data.url}]`,
+ `Fetching file from [${attachment.getUrl()}]`,
);
// Download the file and process it.
const blob = await (
- await fetch(attachment.data.url)
+ await fetch(attachment.getUrl())
).blob();
const file = new File([blob], filename);
await job.log(`Converting attachment [${attachmentId}]`);
- const { file: processedFile } =
- await processor.process(file);
-
- await job.log(`Generating blurhash for [${attachmentId}]`);
-
- const { blurhash } = await blurhashProcessor.process(file);
-
- const mediaManager = new MediaManager(config);
+ const processedFile = await convertImage(file);
await job.log(`Uploading attachment [${attachmentId}]`);
- const { path, uploadedFile } =
- await mediaManager.addFile(processedFile);
+ await attachment.updateFromFile(processedFile);
- const url = Media.getUrl(path);
+ await job.log(
+ `✔ Finished processing attachment [${attachmentId}]`,
+ );
- const sha256 = new Bun.SHA256();
+ break;
+ }
+ case MediaJobType.CalculateMetadata: {
+ // Calculate blurhash
+ const { attachmentId } = job.data;
+
+ await job.log(`Fetching attachment ID [${attachmentId}]`);
+
+ const attachment = await Media.fromId(attachmentId);
+
+ if (!attachment) {
+ throw new Error(
+ `Attachment not found: [${attachmentId}]`,
+ );
+ }
+
+ await job.log(`Processing attachment [${attachmentId}]`);
+ await job.log(
+ `Fetching file from [${attachment.getUrl()}]`,
+ );
+
+ // Download the file and process it.
+ const blob = await (
+ await fetch(attachment.getUrl())
+ ).blob();
+
+ // Filename is not important for blurhash
+ const file = new File([blob], "");
+
+ await job.log(`Generating blurhash for [${attachmentId}]`);
+
+ const blurhash = await calculateBlurhash(file);
await attachment.update({
- url,
- sha256: sha256
- .update(await uploadedFile.arrayBuffer())
- .digest("hex"),
- mimeType: uploadedFile.type,
- size: uploadedFile.size,
blurhash,
});
await job.log(
`✔ Finished processing attachment [${attachmentId}]`,
);
+
+ break;
}
}
},
diff --git a/cli/classes.ts b/cli/classes.ts
index 13cd0c3b..1fc7cbc4 100644
--- a/cli/classes.ts
+++ b/cli/classes.ts
@@ -1,9 +1,9 @@
import { parseUserAddress, userAddressValidator } from "@/api";
import { Args, type Command, Flags, type Interfaces } from "@oclif/core";
-import { type Emoji, Instance, User, db } from "@versia/kit/db";
+import { Emoji, Instance, User } from "@versia/kit/db";
import { Emojis, Instances, Users } from "@versia/kit/tables";
import chalk from "chalk";
-import { and, eq, getTableColumns, like } from "drizzle-orm";
+import { and, eq, inArray, like } from "drizzle-orm";
import { BaseCommand } from "./base.ts";
export type FlagsType = Interfaces.InferredFlags<
@@ -203,14 +203,7 @@ export abstract class EmojiFinderCommand<
this.args = args as ArgsType;
}
- public async findEmojis(): Promise<
- Omit<
- typeof Emoji.$type & {
- instanceUrl: string | null;
- },
- "instance"
- >[]
- > {
+ public async findEmojis(): Promise {
// Check if there are asterisks in the identifier but no pattern flag, warn the user if so
if (this.args.identifier.includes("*") && !this.flags.pattern) {
this.log(
@@ -228,22 +221,26 @@ export abstract class EmojiFinderCommand<
? this.args.identifier.replace(/\*/g, "%")
: this.args.identifier;
- return await db
- .select({
- ...getTableColumns(Emojis),
- instanceUrl: Instances.baseUrl,
- })
- .from(Emojis)
- .leftJoin(Instances, eq(Emojis.instanceId, Instances.id))
- .where(
- and(
- this.flags.type === "shortcode"
- ? operator(Emojis.shortcode, identifier)
- : undefined,
- this.flags.type === "instance"
- ? operator(Instances.baseUrl, identifier)
- : undefined,
- ),
- );
+ const instanceIds =
+ this.flags.type === "instance"
+ ? (
+ await Instance.manyFromSql(
+ operator(Instances.baseUrl, identifier),
+ )
+ ).map((instance) => instance.id)
+ : undefined;
+
+ return await Emoji.manyFromSql(
+ and(
+ this.flags.type === "shortcode"
+ ? operator(Emojis.shortcode, identifier)
+ : undefined,
+ instanceIds && instanceIds.length > 0
+ ? inArray(Emojis.instanceId, instanceIds)
+ : undefined,
+ ),
+ undefined,
+ this.flags.limit,
+ );
}
}
diff --git a/cli/commands/emoji/add.ts b/cli/commands/emoji/add.ts
index 40b37f63..4a0dae16 100644
--- a/cli/commands/emoji/add.ts
+++ b/cli/commands/emoji/add.ts
@@ -4,7 +4,6 @@ import { Emojis } from "@versia/kit/tables";
import chalk from "chalk";
import { and, eq, isNull } from "drizzle-orm";
import ora from "ora";
-import { MediaManager } from "~/classes/media/media-manager";
import { BaseCommand } from "~/cli/base";
import { config } from "~/packages/config-manager";
@@ -97,35 +96,22 @@ export default class EmojiAdd extends BaseCommand {
);
}
- const mediaManager = new MediaManager(config);
-
const spinner = ora("Uploading emoji").start();
- const uploaded = await mediaManager.addFile(file).catch((e: Error) => {
- spinner.fail();
- this.log(`${chalk.red("✗")} Error: ${chalk.red(e.message)}`);
- return null;
- });
-
- if (!uploaded) {
- return this.exit(1);
- }
+ const media = await Media.fromFile(file);
spinner.succeed();
await Emoji.insert({
shortcode: args.shortcode,
- url: Media.getUrl(uploaded.path),
+ mediaId: media.id,
visibleInPicker: true,
- contentType: uploaded.uploadedFile.type,
});
this.log(
`${chalk.green("✓")} Created emoji ${chalk.green(
args.shortcode,
- )} with url ${chalk.blue(
- chalk.underline(Media.getUrl(uploaded.path)),
- )}`,
+ )} with url ${chalk.blue(chalk.underline(media.getUrl()))}`,
);
this.exit(0);
diff --git a/cli/commands/emoji/delete.ts b/cli/commands/emoji/delete.ts
index 87281038..33b26ba1 100644
--- a/cli/commands/emoji/delete.ts
+++ b/cli/commands/emoji/delete.ts
@@ -1,14 +1,9 @@
import confirm from "@inquirer/confirm";
import { Flags } from "@oclif/core";
-import { db } from "@versia/kit/db";
-import { Emojis } from "@versia/kit/tables";
import chalk from "chalk";
-import { eq } from "drizzle-orm";
import ora from "ora";
-import { MediaManager } from "~/classes/media/media-manager";
import { EmojiFinderCommand } from "~/cli/classes";
import { formatArray } from "~/cli/utils/format";
-import { config } from "~/packages/config-manager";
export default class EmojiDelete extends EmojiFinderCommand<
typeof EmojiDelete
@@ -55,13 +50,10 @@ export default class EmojiDelete extends EmojiFinderCommand<
flags.print &&
this.log(
- formatArray(emojis, [
- "id",
- "shortcode",
- "alt",
- "contentType",
- "instanceUrl",
- ]),
+ formatArray(
+ emojis.map((e) => e.data),
+ ["id", "shortcode", "alt", "contentType", "instanceUrl"],
+ ),
);
if (flags.confirm) {
@@ -80,15 +72,11 @@ export default class EmojiDelete extends EmojiFinderCommand<
const spinner = ora("Deleting emoji(s)").start();
for (const emoji of emojis) {
- spinner.text = `Deleting emoji ${chalk.gray(emoji.shortcode)} (${
+ spinner.text = `Deleting emoji ${chalk.gray(emoji.data.shortcode)} (${
emojis.findIndex((e) => e.id === emoji.id) + 1
}/${emojis.length})`;
- const mediaManager = new MediaManager(config);
-
- await mediaManager.deleteFileByUrl(emoji.url);
-
- await db.delete(Emojis).where(eq(Emojis.id, emoji.id));
+ await emoji.delete();
}
spinner.succeed("Emoji(s) deleted");
diff --git a/cli/commands/emoji/import.ts b/cli/commands/emoji/import.ts
index 910730ac..f4c6c201 100644
--- a/cli/commands/emoji/import.ts
+++ b/cli/commands/emoji/import.ts
@@ -6,7 +6,6 @@ import { and, inArray, isNull } from "drizzle-orm";
import { lookup } from "mime-types";
import ora from "ora";
import { unzip } from "unzipit";
-import { MediaManager } from "~/classes/media/media-manager";
import { BaseCommand } from "~/cli/base";
import { config } from "~/packages/config-manager";
@@ -169,8 +168,6 @@ export default class EmojiImport extends BaseCommand {
const importSpinner = ora("Importing emojis").start();
- const mediaManager = new MediaManager(config);
-
const successfullyImported: MetaType["emojis"] = [];
for (const emoji of newEmojis) {
@@ -197,26 +194,12 @@ export default class EmojiImport extends BaseCommand {
type: contentType,
});
- const uploaded = await mediaManager
- .addFile(newFile)
- .catch((e: Error) => {
- this.log(
- `${chalk.red("✗")} Error uploading ${chalk.red(
- emoji.emoji.name,
- )}: ${chalk.red(e.message)}`,
- );
- return null;
- });
-
- if (!uploaded) {
- continue;
- }
+ const media = await Media.fromFile(newFile);
await Emoji.insert({
shortcode: emoji.emoji.name,
- url: Media.getUrl(uploaded.path),
+ mediaId: media.id,
visibleInPicker: true,
- contentType: uploaded.uploadedFile.type,
});
successfullyImported.push(emoji);
diff --git a/config/config.example.toml b/config/config.example.toml
index c28d7823..f4b52460 100644
--- a/config/config.example.toml
+++ b/config/config.example.toml
@@ -125,9 +125,8 @@ enabled = false
[media]
# Can be "s3" or "local", where "local" uploads the file to the local filesystem
-# If you need to change this value after setting up your instance, you must move all the files
-# from one backend to the other manually (the CLI will have an option to do this later)
-# TODO: Add CLI command to move files
+# Changing this value will not retroactively apply to existing data
+# Don't forget to fill in the s3 config :3
backend = "s3"
# Whether to check the hash of media when uploading to avoid duplication
deduplicate_media = true
@@ -145,7 +144,7 @@ convert_to = "image/webp"
convert_vector = false
# [s3]
-# Can be left blank if you don't use the S3 media backend
+# Can be left commented if you don't use the S3 media backend
# endpoint = ""
# access_key = "XXXXX"
# secret_access_key = "XXX"
diff --git a/config/config.schema.json b/config/config.schema.json
index 6229101e..cde891c5 100644
--- a/config/config.schema.json
+++ b/config/config.schema.json
@@ -486,14 +486,7 @@
"secret_access_key",
"public_url"
],
- "additionalProperties": false,
- "default": {
- "endpoint": "",
- "access_key": "",
- "secret_access_key": "",
- "bucket_name": "versia",
- "public_url": "https://cdn.example.com"
- }
+ "additionalProperties": false
},
"validation": {
"type": "object",
diff --git a/drizzle.config.ts b/drizzle.config.ts
index 193d34a6..1aa34449 100644
--- a/drizzle.config.ts
+++ b/drizzle.config.ts
@@ -1,6 +1,10 @@
import type { Config } from "drizzle-kit";
-import { config } from "~/packages/config-manager/index.ts";
+import { config } from "./packages/config-manager/index.ts";
+/**
+ * Drizzle can't properly resolve imports with top-level await, so uncomment
+ * this line when generating migrations.
+ */
export default {
dialect: "postgresql",
out: "./drizzle/migrations",
diff --git a/drizzle/migrations/0042_swift_the_phantom.sql b/drizzle/migrations/0042_swift_the_phantom.sql
new file mode 100644
index 00000000..7ba24098
--- /dev/null
+++ b/drizzle/migrations/0042_swift_the_phantom.sql
@@ -0,0 +1,26 @@
+CREATE TABLE "MediasToNote" (
+ "mediaId" uuid NOT NULL,
+ "noteId" uuid NOT NULL
+);
+--> statement-breakpoint
+ALTER TABLE "Medias" DROP CONSTRAINT "Medias_noteId_Notes_id_fk";
+--> statement-breakpoint
+ALTER TABLE "Medias" ADD COLUMN "content" jsonb NOT NULL;--> statement-breakpoint
+ALTER TABLE "Medias" ADD COLUMN "original_content" jsonb;--> statement-breakpoint
+ALTER TABLE "Medias" ADD COLUMN "thumbnail" jsonb;--> statement-breakpoint
+ALTER TABLE "MediasToNote" ADD CONSTRAINT "MediasToNote_mediaId_Medias_id_fk" FOREIGN KEY ("mediaId") REFERENCES "public"."Medias"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
+ALTER TABLE "MediasToNote" ADD CONSTRAINT "MediasToNote_noteId_Notes_id_fk" FOREIGN KEY ("noteId") REFERENCES "public"."Notes"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
+CREATE INDEX "MediasToNote_mediaId_index" ON "MediasToNote" USING btree ("mediaId");--> statement-breakpoint
+CREATE INDEX "MediasToNote_noteId_index" ON "MediasToNote" USING btree ("noteId");--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "url";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "remote_url";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "thumbnail_url";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "mime_type";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "description";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "sha256";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "fps";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "duration";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "width";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "height";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "size";--> statement-breakpoint
+ALTER TABLE "Medias" DROP COLUMN "noteId";
diff --git a/drizzle/migrations/0043_mute_jigsaw.sql b/drizzle/migrations/0043_mute_jigsaw.sql
new file mode 100644
index 00000000..78ab5562
--- /dev/null
+++ b/drizzle/migrations/0043_mute_jigsaw.sql
@@ -0,0 +1,5 @@
+ALTER TABLE "Emojis" ADD COLUMN "mediaId" uuid;--> statement-breakpoint
+ALTER TABLE "Emojis" ADD CONSTRAINT "Emojis_mediaId_Medias_id_fk" FOREIGN KEY ("mediaId") REFERENCES "public"."Medias"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
+ALTER TABLE "Emojis" DROP COLUMN "url";--> statement-breakpoint
+ALTER TABLE "Emojis" DROP COLUMN "alt";--> statement-breakpoint
+ALTER TABLE "Emojis" DROP COLUMN "content_type";
\ No newline at end of file
diff --git a/drizzle/migrations/0044_quiet_jasper_sitwell.sql b/drizzle/migrations/0044_quiet_jasper_sitwell.sql
new file mode 100644
index 00000000..95a43ff7
--- /dev/null
+++ b/drizzle/migrations/0044_quiet_jasper_sitwell.sql
@@ -0,0 +1 @@
+ALTER TABLE "Emojis" ALTER COLUMN "mediaId" SET NOT NULL;
\ No newline at end of file
diff --git a/drizzle/migrations/0045_polite_mikhail_rasputin.sql b/drizzle/migrations/0045_polite_mikhail_rasputin.sql
new file mode 100644
index 00000000..161279a0
--- /dev/null
+++ b/drizzle/migrations/0045_polite_mikhail_rasputin.sql
@@ -0,0 +1,6 @@
+ALTER TABLE "Users" ADD COLUMN "avatarId" uuid;--> statement-breakpoint
+ALTER TABLE "Users" ADD COLUMN "headerId" uuid;--> statement-breakpoint
+ALTER TABLE "Users" ADD CONSTRAINT "Users_avatarId_Medias_id_fk" FOREIGN KEY ("avatarId") REFERENCES "public"."Medias"("id") ON DELETE set null ON UPDATE cascade;--> statement-breakpoint
+ALTER TABLE "Users" ADD CONSTRAINT "Users_headerId_Medias_id_fk" FOREIGN KEY ("headerId") REFERENCES "public"."Medias"("id") ON DELETE set null ON UPDATE cascade;--> statement-breakpoint
+ALTER TABLE "Users" DROP COLUMN "avatar";--> statement-breakpoint
+ALTER TABLE "Users" DROP COLUMN "header";
\ No newline at end of file
diff --git a/drizzle/migrations/meta/0042_snapshot.json b/drizzle/migrations/meta/0042_snapshot.json
new file mode 100644
index 00000000..45c06581
--- /dev/null
+++ b/drizzle/migrations/meta/0042_snapshot.json
@@ -0,0 +1,2334 @@
+{
+ "id": "9d54da45-40be-4d21-98c0-3866d923f952",
+ "prevId": "769b448b-bf4d-444b-ac10-2d0c405a5d19",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.Applications": {
+ "name": "Applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "website": {
+ "name": "website",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "vapid_key": {
+ "name": "vapid_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scopes": {
+ "name": "scopes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "Applications_client_id_index": {
+ "name": "Applications_client_id_index",
+ "columns": [
+ {
+ "expression": "client_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Challenges": {
+ "name": "Challenges",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "challenge": {
+ "name": "challenge",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "NOW() + INTERVAL '5 minutes'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToNote": {
+ "name": "EmojiToNote",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToNote_emojiId_noteId_index": {
+ "name": "EmojiToNote_emojiId_noteId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToNote_noteId_index": {
+ "name": "EmojiToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToNote_emojiId_Emojis_id_fk": {
+ "name": "EmojiToNote_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToNote_noteId_Notes_id_fk": {
+ "name": "EmojiToNote_noteId_Notes_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToUser": {
+ "name": "EmojiToUser",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToUser_emojiId_userId_index": {
+ "name": "EmojiToUser_emojiId_userId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToUser_userId_index": {
+ "name": "EmojiToUser_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToUser_emojiId_Emojis_id_fk": {
+ "name": "EmojiToUser_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToUser_userId_Users_id_fk": {
+ "name": "EmojiToUser_userId_Users_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Emojis": {
+ "name": "Emojis",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "shortcode": {
+ "name": "shortcode",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "visible_in_picker": {
+ "name": "visible_in_picker",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "alt": {
+ "name": "alt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "category": {
+ "name": "category",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Emojis_instanceId_Instances_id_fk": {
+ "name": "Emojis_instanceId_Instances_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_ownerId_Users_id_fk": {
+ "name": "Emojis_ownerId_Users_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.FilterKeywords": {
+ "name": "FilterKeywords",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "filterId": {
+ "name": "filterId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "keyword": {
+ "name": "keyword",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "whole_word": {
+ "name": "whole_word",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "FilterKeywords_filterId_Filters_id_fk": {
+ "name": "FilterKeywords_filterId_Filters_id_fk",
+ "tableFrom": "FilterKeywords",
+ "tableTo": "Filters",
+ "columnsFrom": ["filterId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Filters": {
+ "name": "Filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "context": {
+ "name": "context",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "filter_action": {
+ "name": "filter_action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Filters_userId_Users_id_fk": {
+ "name": "Filters_userId_Users_id_fk",
+ "tableFrom": "Filters",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Flags": {
+ "name": "Flags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "flag_type": {
+ "name": "flag_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'other'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Flags_noteId_Notes_id_fk": {
+ "name": "Flags_noteId_Notes_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Flags_userId_Users_id_fk": {
+ "name": "Flags_userId_Users_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Instances": {
+ "name": "Instances",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "base_url": {
+ "name": "base_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "logo": {
+ "name": "logo",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "protocol": {
+ "name": "protocol",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'versia'"
+ },
+ "inbox": {
+ "name": "inbox",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "extensions": {
+ "name": "extensions",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Likes": {
+ "name": "Likes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "likerId": {
+ "name": "likerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "likedId": {
+ "name": "likedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Likes_likerId_Users_id_fk": {
+ "name": "Likes_likerId_Users_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Users",
+ "columnsFrom": ["likerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Likes_likedId_Notes_id_fk": {
+ "name": "Likes_likedId_Notes_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Notes",
+ "columnsFrom": ["likedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Likes_uri_unique": {
+ "name": "Likes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Markers": {
+ "name": "Markers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notificationId": {
+ "name": "notificationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timeline": {
+ "name": "timeline",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Markers_noteId_Notes_id_fk": {
+ "name": "Markers_noteId_Notes_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_notificationId_Notifications_id_fk": {
+ "name": "Markers_notificationId_Notifications_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notifications",
+ "columnsFrom": ["notificationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_userId_Users_id_fk": {
+ "name": "Markers_userId_Users_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Medias": {
+ "name": "Medias",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "content": {
+ "name": "content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "original_content": {
+ "name": "original_content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "thumbnail": {
+ "name": "thumbnail",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blurhash": {
+ "name": "blurhash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.MediasToNote": {
+ "name": "MediasToNote",
+ "schema": "",
+ "columns": {
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "MediasToNote_mediaId_index": {
+ "name": "MediasToNote_mediaId_index",
+ "columns": [
+ {
+ "expression": "mediaId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "MediasToNote_noteId_index": {
+ "name": "MediasToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "MediasToNote_mediaId_Medias_id_fk": {
+ "name": "MediasToNote_mediaId_Medias_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "MediasToNote_noteId_Notes_id_fk": {
+ "name": "MediasToNote_noteId_Notes_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModNotes": {
+ "name": "ModNotes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModNotes_noteId_Notes_id_fk": {
+ "name": "ModNotes_noteId_Notes_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_userId_Users_id_fk": {
+ "name": "ModNotes_userId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_modId_Users_id_fk": {
+ "name": "ModNotes_modId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModTags": {
+ "name": "ModTags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag": {
+ "name": "tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModTags_noteId_Notes_id_fk": {
+ "name": "ModTags_noteId_Notes_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_userId_Users_id_fk": {
+ "name": "ModTags_userId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_modId_Users_id_fk": {
+ "name": "ModTags_modId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.NoteToMentions": {
+ "name": "NoteToMentions",
+ "schema": "",
+ "columns": {
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "NoteToMentions_noteId_userId_index": {
+ "name": "NoteToMentions_noteId_userId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "NoteToMentions_userId_index": {
+ "name": "NoteToMentions_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "NoteToMentions_noteId_Notes_id_fk": {
+ "name": "NoteToMentions_noteId_Notes_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "NoteToMentions_userId_Users_id_fk": {
+ "name": "NoteToMentions_userId_Users_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notes": {
+ "name": "Notes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reblogId": {
+ "name": "reblogId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'text/plain'"
+ },
+ "visibility": {
+ "name": "visibility",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replyId": {
+ "name": "replyId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "quoteId": {
+ "name": "quoteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sensitive": {
+ "name": "sensitive",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "spoiler_text": {
+ "name": "spoiler_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_source": {
+ "name": "content_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notes_authorId_Users_id_fk": {
+ "name": "Notes_authorId_Users_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_reblogId_Notes_id_fk": {
+ "name": "Notes_reblogId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["reblogId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_replyId_Notes_id_fk": {
+ "name": "Notes_replyId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["replyId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_quoteId_Notes_id_fk": {
+ "name": "Notes_quoteId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["quoteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_applicationId_Applications_id_fk": {
+ "name": "Notes_applicationId_Applications_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Notes_uri_unique": {
+ "name": "Notes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notifications": {
+ "name": "Notifications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "notifiedId": {
+ "name": "notifiedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "accountId": {
+ "name": "accountId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dismissed": {
+ "name": "dismissed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notifications_notifiedId_Users_id_fk": {
+ "name": "Notifications_notifiedId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["notifiedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_accountId_Users_id_fk": {
+ "name": "Notifications_accountId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["accountId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_noteId_Notes_id_fk": {
+ "name": "Notifications_noteId_Notes_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdAccounts": {
+ "name": "OpenIdAccounts",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "server_id": {
+ "name": "server_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdAccounts_userId_Users_id_fk": {
+ "name": "OpenIdAccounts_userId_Users_id_fk",
+ "tableFrom": "OpenIdAccounts",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdLoginFlows": {
+ "name": "OpenIdLoginFlows",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "code_verifier": {
+ "name": "code_verifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdLoginFlows_applicationId_Applications_id_fk": {
+ "name": "OpenIdLoginFlows_applicationId_Applications_id_fk",
+ "tableFrom": "OpenIdLoginFlows",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.PushSubscriptions": {
+ "name": "PushSubscriptions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "auth_secret": {
+ "name": "auth_secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "alerts": {
+ "name": "alerts",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "policy": {
+ "name": "policy",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "tokenId": {
+ "name": "tokenId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "PushSubscriptions_tokenId_Tokens_id_fk": {
+ "name": "PushSubscriptions_tokenId_Tokens_id_fk",
+ "tableFrom": "PushSubscriptions",
+ "tableTo": "Tokens",
+ "columnsFrom": ["tokenId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "PushSubscriptions_tokenId_unique": {
+ "name": "PushSubscriptions_tokenId_unique",
+ "nullsNotDistinct": false,
+ "columns": ["tokenId"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Reaction": {
+ "name": "Reaction",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emoji_text": {
+ "name": "emoji_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Reaction_emojiId_Emojis_id_fk": {
+ "name": "Reaction_emojiId_Emojis_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_noteId_Notes_id_fk": {
+ "name": "Reaction_noteId_Notes_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_authorId_Users_id_fk": {
+ "name": "Reaction_authorId_Users_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Reaction_uri_unique": {
+ "name": "Reaction_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Relationships": {
+ "name": "Relationships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subjectId": {
+ "name": "subjectId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "following": {
+ "name": "following",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "showing_reblogs": {
+ "name": "showing_reblogs",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "notifying": {
+ "name": "notifying",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "blocking": {
+ "name": "blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting": {
+ "name": "muting",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting_notifications": {
+ "name": "muting_notifications",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "requested": {
+ "name": "requested",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "domain_blocking": {
+ "name": "domain_blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endorsed": {
+ "name": "endorsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "languages": {
+ "name": "languages",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Relationships_ownerId_Users_id_fk": {
+ "name": "Relationships_ownerId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Relationships_subjectId_Users_id_fk": {
+ "name": "Relationships_subjectId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["subjectId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.RoleToUsers": {
+ "name": "RoleToUsers",
+ "schema": "",
+ "columns": {
+ "roleId": {
+ "name": "roleId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "RoleToUsers_roleId_Roles_id_fk": {
+ "name": "RoleToUsers_roleId_Roles_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Roles",
+ "columnsFrom": ["roleId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "RoleToUsers_userId_Users_id_fk": {
+ "name": "RoleToUsers_userId_Users_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Roles": {
+ "name": "Roles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permissions": {
+ "name": "permissions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "visible": {
+ "name": "visible",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "icon": {
+ "name": "icon",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Tokens": {
+ "name": "Tokens",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "code": {
+ "name": "code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Tokens_userId_Users_id_fk": {
+ "name": "Tokens_userId_Users_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Tokens_applicationId_Applications_id_fk": {
+ "name": "Tokens_applicationId_Applications_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.UserToPinnedNotes": {
+ "name": "UserToPinnedNotes",
+ "schema": "",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "UserToPinnedNotes_userId_noteId_index": {
+ "name": "UserToPinnedNotes_userId_noteId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "UserToPinnedNotes_noteId_index": {
+ "name": "UserToPinnedNotes_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "UserToPinnedNotes_userId_Users_id_fk": {
+ "name": "UserToPinnedNotes_userId_Users_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "UserToPinnedNotes_noteId_Notes_id_fk": {
+ "name": "UserToPinnedNotes_noteId_Notes_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Users": {
+ "name": "Users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "is_admin": {
+ "name": "is_admin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "email_verification_token": {
+ "name": "email_verification_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password_reset_token": {
+ "name": "password_reset_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "fields": {
+ "name": "fields",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "endpoints": {
+ "name": "endpoints",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "source": {
+ "name": "source",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "avatar": {
+ "name": "avatar",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "header": {
+ "name": "header",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "is_bot": {
+ "name": "is_bot",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_locked": {
+ "name": "is_locked",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_discoverable": {
+ "name": "is_discoverable",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "sanctions": {
+ "name": "sanctions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "private_key": {
+ "name": "private_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "Users_uri_index": {
+ "name": "Users_uri_index",
+ "columns": [
+ {
+ "expression": "uri",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_username_index": {
+ "name": "Users_username_index",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_email_index": {
+ "name": "Users_email_index",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "Users_instanceId_Instances_id_fk": {
+ "name": "Users_instanceId_Instances_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Users_uri_unique": {
+ "name": "Users_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/drizzle/migrations/meta/0043_snapshot.json b/drizzle/migrations/meta/0043_snapshot.json
new file mode 100644
index 00000000..ed37f5fc
--- /dev/null
+++ b/drizzle/migrations/meta/0043_snapshot.json
@@ -0,0 +1,2331 @@
+{
+ "id": "f879b039-04d9-422b-9a60-424b38e9ade5",
+ "prevId": "9d54da45-40be-4d21-98c0-3866d923f952",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.Applications": {
+ "name": "Applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "website": {
+ "name": "website",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "vapid_key": {
+ "name": "vapid_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scopes": {
+ "name": "scopes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "Applications_client_id_index": {
+ "name": "Applications_client_id_index",
+ "columns": [
+ {
+ "expression": "client_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Challenges": {
+ "name": "Challenges",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "challenge": {
+ "name": "challenge",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "NOW() + INTERVAL '5 minutes'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToNote": {
+ "name": "EmojiToNote",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToNote_emojiId_noteId_index": {
+ "name": "EmojiToNote_emojiId_noteId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToNote_noteId_index": {
+ "name": "EmojiToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToNote_emojiId_Emojis_id_fk": {
+ "name": "EmojiToNote_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToNote_noteId_Notes_id_fk": {
+ "name": "EmojiToNote_noteId_Notes_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToUser": {
+ "name": "EmojiToUser",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToUser_emojiId_userId_index": {
+ "name": "EmojiToUser_emojiId_userId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToUser_userId_index": {
+ "name": "EmojiToUser_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToUser_emojiId_Emojis_id_fk": {
+ "name": "EmojiToUser_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToUser_userId_Users_id_fk": {
+ "name": "EmojiToUser_userId_Users_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Emojis": {
+ "name": "Emojis",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "shortcode": {
+ "name": "shortcode",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "visible_in_picker": {
+ "name": "visible_in_picker",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "category": {
+ "name": "category",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Emojis_mediaId_Medias_id_fk": {
+ "name": "Emojis_mediaId_Medias_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_instanceId_Instances_id_fk": {
+ "name": "Emojis_instanceId_Instances_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_ownerId_Users_id_fk": {
+ "name": "Emojis_ownerId_Users_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.FilterKeywords": {
+ "name": "FilterKeywords",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "filterId": {
+ "name": "filterId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "keyword": {
+ "name": "keyword",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "whole_word": {
+ "name": "whole_word",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "FilterKeywords_filterId_Filters_id_fk": {
+ "name": "FilterKeywords_filterId_Filters_id_fk",
+ "tableFrom": "FilterKeywords",
+ "tableTo": "Filters",
+ "columnsFrom": ["filterId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Filters": {
+ "name": "Filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "context": {
+ "name": "context",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "filter_action": {
+ "name": "filter_action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Filters_userId_Users_id_fk": {
+ "name": "Filters_userId_Users_id_fk",
+ "tableFrom": "Filters",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Flags": {
+ "name": "Flags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "flag_type": {
+ "name": "flag_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'other'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Flags_noteId_Notes_id_fk": {
+ "name": "Flags_noteId_Notes_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Flags_userId_Users_id_fk": {
+ "name": "Flags_userId_Users_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Instances": {
+ "name": "Instances",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "base_url": {
+ "name": "base_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "logo": {
+ "name": "logo",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "protocol": {
+ "name": "protocol",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'versia'"
+ },
+ "inbox": {
+ "name": "inbox",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "extensions": {
+ "name": "extensions",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Likes": {
+ "name": "Likes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "likerId": {
+ "name": "likerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "likedId": {
+ "name": "likedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Likes_likerId_Users_id_fk": {
+ "name": "Likes_likerId_Users_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Users",
+ "columnsFrom": ["likerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Likes_likedId_Notes_id_fk": {
+ "name": "Likes_likedId_Notes_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Notes",
+ "columnsFrom": ["likedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Likes_uri_unique": {
+ "name": "Likes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Markers": {
+ "name": "Markers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notificationId": {
+ "name": "notificationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timeline": {
+ "name": "timeline",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Markers_noteId_Notes_id_fk": {
+ "name": "Markers_noteId_Notes_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_notificationId_Notifications_id_fk": {
+ "name": "Markers_notificationId_Notifications_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notifications",
+ "columnsFrom": ["notificationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_userId_Users_id_fk": {
+ "name": "Markers_userId_Users_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Medias": {
+ "name": "Medias",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "content": {
+ "name": "content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "original_content": {
+ "name": "original_content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "thumbnail": {
+ "name": "thumbnail",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blurhash": {
+ "name": "blurhash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.MediasToNote": {
+ "name": "MediasToNote",
+ "schema": "",
+ "columns": {
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "MediasToNote_mediaId_index": {
+ "name": "MediasToNote_mediaId_index",
+ "columns": [
+ {
+ "expression": "mediaId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "MediasToNote_noteId_index": {
+ "name": "MediasToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "MediasToNote_mediaId_Medias_id_fk": {
+ "name": "MediasToNote_mediaId_Medias_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "MediasToNote_noteId_Notes_id_fk": {
+ "name": "MediasToNote_noteId_Notes_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModNotes": {
+ "name": "ModNotes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModNotes_noteId_Notes_id_fk": {
+ "name": "ModNotes_noteId_Notes_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_userId_Users_id_fk": {
+ "name": "ModNotes_userId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_modId_Users_id_fk": {
+ "name": "ModNotes_modId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModTags": {
+ "name": "ModTags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag": {
+ "name": "tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModTags_noteId_Notes_id_fk": {
+ "name": "ModTags_noteId_Notes_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_userId_Users_id_fk": {
+ "name": "ModTags_userId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_modId_Users_id_fk": {
+ "name": "ModTags_modId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.NoteToMentions": {
+ "name": "NoteToMentions",
+ "schema": "",
+ "columns": {
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "NoteToMentions_noteId_userId_index": {
+ "name": "NoteToMentions_noteId_userId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "NoteToMentions_userId_index": {
+ "name": "NoteToMentions_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "NoteToMentions_noteId_Notes_id_fk": {
+ "name": "NoteToMentions_noteId_Notes_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "NoteToMentions_userId_Users_id_fk": {
+ "name": "NoteToMentions_userId_Users_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notes": {
+ "name": "Notes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reblogId": {
+ "name": "reblogId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'text/plain'"
+ },
+ "visibility": {
+ "name": "visibility",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replyId": {
+ "name": "replyId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "quoteId": {
+ "name": "quoteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sensitive": {
+ "name": "sensitive",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "spoiler_text": {
+ "name": "spoiler_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_source": {
+ "name": "content_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notes_authorId_Users_id_fk": {
+ "name": "Notes_authorId_Users_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_reblogId_Notes_id_fk": {
+ "name": "Notes_reblogId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["reblogId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_replyId_Notes_id_fk": {
+ "name": "Notes_replyId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["replyId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_quoteId_Notes_id_fk": {
+ "name": "Notes_quoteId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["quoteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_applicationId_Applications_id_fk": {
+ "name": "Notes_applicationId_Applications_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Notes_uri_unique": {
+ "name": "Notes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notifications": {
+ "name": "Notifications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "notifiedId": {
+ "name": "notifiedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "accountId": {
+ "name": "accountId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dismissed": {
+ "name": "dismissed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notifications_notifiedId_Users_id_fk": {
+ "name": "Notifications_notifiedId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["notifiedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_accountId_Users_id_fk": {
+ "name": "Notifications_accountId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["accountId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_noteId_Notes_id_fk": {
+ "name": "Notifications_noteId_Notes_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdAccounts": {
+ "name": "OpenIdAccounts",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "server_id": {
+ "name": "server_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdAccounts_userId_Users_id_fk": {
+ "name": "OpenIdAccounts_userId_Users_id_fk",
+ "tableFrom": "OpenIdAccounts",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdLoginFlows": {
+ "name": "OpenIdLoginFlows",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "code_verifier": {
+ "name": "code_verifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdLoginFlows_applicationId_Applications_id_fk": {
+ "name": "OpenIdLoginFlows_applicationId_Applications_id_fk",
+ "tableFrom": "OpenIdLoginFlows",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.PushSubscriptions": {
+ "name": "PushSubscriptions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "auth_secret": {
+ "name": "auth_secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "alerts": {
+ "name": "alerts",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "policy": {
+ "name": "policy",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "tokenId": {
+ "name": "tokenId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "PushSubscriptions_tokenId_Tokens_id_fk": {
+ "name": "PushSubscriptions_tokenId_Tokens_id_fk",
+ "tableFrom": "PushSubscriptions",
+ "tableTo": "Tokens",
+ "columnsFrom": ["tokenId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "PushSubscriptions_tokenId_unique": {
+ "name": "PushSubscriptions_tokenId_unique",
+ "nullsNotDistinct": false,
+ "columns": ["tokenId"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Reaction": {
+ "name": "Reaction",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emoji_text": {
+ "name": "emoji_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Reaction_emojiId_Emojis_id_fk": {
+ "name": "Reaction_emojiId_Emojis_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_noteId_Notes_id_fk": {
+ "name": "Reaction_noteId_Notes_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_authorId_Users_id_fk": {
+ "name": "Reaction_authorId_Users_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Reaction_uri_unique": {
+ "name": "Reaction_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Relationships": {
+ "name": "Relationships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subjectId": {
+ "name": "subjectId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "following": {
+ "name": "following",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "showing_reblogs": {
+ "name": "showing_reblogs",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "notifying": {
+ "name": "notifying",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "blocking": {
+ "name": "blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting": {
+ "name": "muting",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting_notifications": {
+ "name": "muting_notifications",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "requested": {
+ "name": "requested",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "domain_blocking": {
+ "name": "domain_blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endorsed": {
+ "name": "endorsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "languages": {
+ "name": "languages",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Relationships_ownerId_Users_id_fk": {
+ "name": "Relationships_ownerId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Relationships_subjectId_Users_id_fk": {
+ "name": "Relationships_subjectId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["subjectId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.RoleToUsers": {
+ "name": "RoleToUsers",
+ "schema": "",
+ "columns": {
+ "roleId": {
+ "name": "roleId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "RoleToUsers_roleId_Roles_id_fk": {
+ "name": "RoleToUsers_roleId_Roles_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Roles",
+ "columnsFrom": ["roleId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "RoleToUsers_userId_Users_id_fk": {
+ "name": "RoleToUsers_userId_Users_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Roles": {
+ "name": "Roles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permissions": {
+ "name": "permissions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "visible": {
+ "name": "visible",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "icon": {
+ "name": "icon",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Tokens": {
+ "name": "Tokens",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "code": {
+ "name": "code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Tokens_userId_Users_id_fk": {
+ "name": "Tokens_userId_Users_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Tokens_applicationId_Applications_id_fk": {
+ "name": "Tokens_applicationId_Applications_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.UserToPinnedNotes": {
+ "name": "UserToPinnedNotes",
+ "schema": "",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "UserToPinnedNotes_userId_noteId_index": {
+ "name": "UserToPinnedNotes_userId_noteId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "UserToPinnedNotes_noteId_index": {
+ "name": "UserToPinnedNotes_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "UserToPinnedNotes_userId_Users_id_fk": {
+ "name": "UserToPinnedNotes_userId_Users_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "UserToPinnedNotes_noteId_Notes_id_fk": {
+ "name": "UserToPinnedNotes_noteId_Notes_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Users": {
+ "name": "Users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "is_admin": {
+ "name": "is_admin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "email_verification_token": {
+ "name": "email_verification_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password_reset_token": {
+ "name": "password_reset_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "fields": {
+ "name": "fields",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "endpoints": {
+ "name": "endpoints",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "source": {
+ "name": "source",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "avatar": {
+ "name": "avatar",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "header": {
+ "name": "header",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "is_bot": {
+ "name": "is_bot",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_locked": {
+ "name": "is_locked",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_discoverable": {
+ "name": "is_discoverable",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "sanctions": {
+ "name": "sanctions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "private_key": {
+ "name": "private_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "Users_uri_index": {
+ "name": "Users_uri_index",
+ "columns": [
+ {
+ "expression": "uri",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_username_index": {
+ "name": "Users_username_index",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_email_index": {
+ "name": "Users_email_index",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "Users_instanceId_Instances_id_fk": {
+ "name": "Users_instanceId_Instances_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Users_uri_unique": {
+ "name": "Users_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/drizzle/migrations/meta/0044_snapshot.json b/drizzle/migrations/meta/0044_snapshot.json
new file mode 100644
index 00000000..7275c5f9
--- /dev/null
+++ b/drizzle/migrations/meta/0044_snapshot.json
@@ -0,0 +1,2331 @@
+{
+ "id": "e0c4fc7d-dded-4399-9859-fbaca1143721",
+ "prevId": "f879b039-04d9-422b-9a60-424b38e9ade5",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.Applications": {
+ "name": "Applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "website": {
+ "name": "website",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "vapid_key": {
+ "name": "vapid_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scopes": {
+ "name": "scopes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "Applications_client_id_index": {
+ "name": "Applications_client_id_index",
+ "columns": [
+ {
+ "expression": "client_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Challenges": {
+ "name": "Challenges",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "challenge": {
+ "name": "challenge",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "NOW() + INTERVAL '5 minutes'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToNote": {
+ "name": "EmojiToNote",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToNote_emojiId_noteId_index": {
+ "name": "EmojiToNote_emojiId_noteId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToNote_noteId_index": {
+ "name": "EmojiToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToNote_emojiId_Emojis_id_fk": {
+ "name": "EmojiToNote_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToNote_noteId_Notes_id_fk": {
+ "name": "EmojiToNote_noteId_Notes_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToUser": {
+ "name": "EmojiToUser",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToUser_emojiId_userId_index": {
+ "name": "EmojiToUser_emojiId_userId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToUser_userId_index": {
+ "name": "EmojiToUser_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToUser_emojiId_Emojis_id_fk": {
+ "name": "EmojiToUser_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToUser_userId_Users_id_fk": {
+ "name": "EmojiToUser_userId_Users_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Emojis": {
+ "name": "Emojis",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "shortcode": {
+ "name": "shortcode",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "visible_in_picker": {
+ "name": "visible_in_picker",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "category": {
+ "name": "category",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Emojis_mediaId_Medias_id_fk": {
+ "name": "Emojis_mediaId_Medias_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_instanceId_Instances_id_fk": {
+ "name": "Emojis_instanceId_Instances_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_ownerId_Users_id_fk": {
+ "name": "Emojis_ownerId_Users_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.FilterKeywords": {
+ "name": "FilterKeywords",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "filterId": {
+ "name": "filterId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "keyword": {
+ "name": "keyword",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "whole_word": {
+ "name": "whole_word",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "FilterKeywords_filterId_Filters_id_fk": {
+ "name": "FilterKeywords_filterId_Filters_id_fk",
+ "tableFrom": "FilterKeywords",
+ "tableTo": "Filters",
+ "columnsFrom": ["filterId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Filters": {
+ "name": "Filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "context": {
+ "name": "context",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "filter_action": {
+ "name": "filter_action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Filters_userId_Users_id_fk": {
+ "name": "Filters_userId_Users_id_fk",
+ "tableFrom": "Filters",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Flags": {
+ "name": "Flags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "flag_type": {
+ "name": "flag_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'other'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Flags_noteId_Notes_id_fk": {
+ "name": "Flags_noteId_Notes_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Flags_userId_Users_id_fk": {
+ "name": "Flags_userId_Users_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Instances": {
+ "name": "Instances",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "base_url": {
+ "name": "base_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "logo": {
+ "name": "logo",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "protocol": {
+ "name": "protocol",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'versia'"
+ },
+ "inbox": {
+ "name": "inbox",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "extensions": {
+ "name": "extensions",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Likes": {
+ "name": "Likes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "likerId": {
+ "name": "likerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "likedId": {
+ "name": "likedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Likes_likerId_Users_id_fk": {
+ "name": "Likes_likerId_Users_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Users",
+ "columnsFrom": ["likerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Likes_likedId_Notes_id_fk": {
+ "name": "Likes_likedId_Notes_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Notes",
+ "columnsFrom": ["likedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Likes_uri_unique": {
+ "name": "Likes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Markers": {
+ "name": "Markers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notificationId": {
+ "name": "notificationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timeline": {
+ "name": "timeline",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Markers_noteId_Notes_id_fk": {
+ "name": "Markers_noteId_Notes_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_notificationId_Notifications_id_fk": {
+ "name": "Markers_notificationId_Notifications_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notifications",
+ "columnsFrom": ["notificationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_userId_Users_id_fk": {
+ "name": "Markers_userId_Users_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Medias": {
+ "name": "Medias",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "content": {
+ "name": "content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "original_content": {
+ "name": "original_content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "thumbnail": {
+ "name": "thumbnail",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blurhash": {
+ "name": "blurhash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.MediasToNote": {
+ "name": "MediasToNote",
+ "schema": "",
+ "columns": {
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "MediasToNote_mediaId_index": {
+ "name": "MediasToNote_mediaId_index",
+ "columns": [
+ {
+ "expression": "mediaId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "MediasToNote_noteId_index": {
+ "name": "MediasToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "MediasToNote_mediaId_Medias_id_fk": {
+ "name": "MediasToNote_mediaId_Medias_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "MediasToNote_noteId_Notes_id_fk": {
+ "name": "MediasToNote_noteId_Notes_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModNotes": {
+ "name": "ModNotes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModNotes_noteId_Notes_id_fk": {
+ "name": "ModNotes_noteId_Notes_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_userId_Users_id_fk": {
+ "name": "ModNotes_userId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_modId_Users_id_fk": {
+ "name": "ModNotes_modId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModTags": {
+ "name": "ModTags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag": {
+ "name": "tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModTags_noteId_Notes_id_fk": {
+ "name": "ModTags_noteId_Notes_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_userId_Users_id_fk": {
+ "name": "ModTags_userId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_modId_Users_id_fk": {
+ "name": "ModTags_modId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.NoteToMentions": {
+ "name": "NoteToMentions",
+ "schema": "",
+ "columns": {
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "NoteToMentions_noteId_userId_index": {
+ "name": "NoteToMentions_noteId_userId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "NoteToMentions_userId_index": {
+ "name": "NoteToMentions_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "NoteToMentions_noteId_Notes_id_fk": {
+ "name": "NoteToMentions_noteId_Notes_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "NoteToMentions_userId_Users_id_fk": {
+ "name": "NoteToMentions_userId_Users_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notes": {
+ "name": "Notes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reblogId": {
+ "name": "reblogId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'text/plain'"
+ },
+ "visibility": {
+ "name": "visibility",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replyId": {
+ "name": "replyId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "quoteId": {
+ "name": "quoteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sensitive": {
+ "name": "sensitive",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "spoiler_text": {
+ "name": "spoiler_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_source": {
+ "name": "content_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notes_authorId_Users_id_fk": {
+ "name": "Notes_authorId_Users_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_reblogId_Notes_id_fk": {
+ "name": "Notes_reblogId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["reblogId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_replyId_Notes_id_fk": {
+ "name": "Notes_replyId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["replyId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_quoteId_Notes_id_fk": {
+ "name": "Notes_quoteId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["quoteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_applicationId_Applications_id_fk": {
+ "name": "Notes_applicationId_Applications_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Notes_uri_unique": {
+ "name": "Notes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notifications": {
+ "name": "Notifications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "notifiedId": {
+ "name": "notifiedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "accountId": {
+ "name": "accountId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dismissed": {
+ "name": "dismissed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notifications_notifiedId_Users_id_fk": {
+ "name": "Notifications_notifiedId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["notifiedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_accountId_Users_id_fk": {
+ "name": "Notifications_accountId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["accountId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_noteId_Notes_id_fk": {
+ "name": "Notifications_noteId_Notes_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdAccounts": {
+ "name": "OpenIdAccounts",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "server_id": {
+ "name": "server_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdAccounts_userId_Users_id_fk": {
+ "name": "OpenIdAccounts_userId_Users_id_fk",
+ "tableFrom": "OpenIdAccounts",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdLoginFlows": {
+ "name": "OpenIdLoginFlows",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "code_verifier": {
+ "name": "code_verifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdLoginFlows_applicationId_Applications_id_fk": {
+ "name": "OpenIdLoginFlows_applicationId_Applications_id_fk",
+ "tableFrom": "OpenIdLoginFlows",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.PushSubscriptions": {
+ "name": "PushSubscriptions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "auth_secret": {
+ "name": "auth_secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "alerts": {
+ "name": "alerts",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "policy": {
+ "name": "policy",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "tokenId": {
+ "name": "tokenId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "PushSubscriptions_tokenId_Tokens_id_fk": {
+ "name": "PushSubscriptions_tokenId_Tokens_id_fk",
+ "tableFrom": "PushSubscriptions",
+ "tableTo": "Tokens",
+ "columnsFrom": ["tokenId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "PushSubscriptions_tokenId_unique": {
+ "name": "PushSubscriptions_tokenId_unique",
+ "nullsNotDistinct": false,
+ "columns": ["tokenId"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Reaction": {
+ "name": "Reaction",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emoji_text": {
+ "name": "emoji_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Reaction_emojiId_Emojis_id_fk": {
+ "name": "Reaction_emojiId_Emojis_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_noteId_Notes_id_fk": {
+ "name": "Reaction_noteId_Notes_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_authorId_Users_id_fk": {
+ "name": "Reaction_authorId_Users_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Reaction_uri_unique": {
+ "name": "Reaction_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Relationships": {
+ "name": "Relationships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subjectId": {
+ "name": "subjectId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "following": {
+ "name": "following",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "showing_reblogs": {
+ "name": "showing_reblogs",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "notifying": {
+ "name": "notifying",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "blocking": {
+ "name": "blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting": {
+ "name": "muting",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting_notifications": {
+ "name": "muting_notifications",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "requested": {
+ "name": "requested",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "domain_blocking": {
+ "name": "domain_blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endorsed": {
+ "name": "endorsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "languages": {
+ "name": "languages",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Relationships_ownerId_Users_id_fk": {
+ "name": "Relationships_ownerId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Relationships_subjectId_Users_id_fk": {
+ "name": "Relationships_subjectId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["subjectId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.RoleToUsers": {
+ "name": "RoleToUsers",
+ "schema": "",
+ "columns": {
+ "roleId": {
+ "name": "roleId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "RoleToUsers_roleId_Roles_id_fk": {
+ "name": "RoleToUsers_roleId_Roles_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Roles",
+ "columnsFrom": ["roleId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "RoleToUsers_userId_Users_id_fk": {
+ "name": "RoleToUsers_userId_Users_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Roles": {
+ "name": "Roles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permissions": {
+ "name": "permissions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "visible": {
+ "name": "visible",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "icon": {
+ "name": "icon",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Tokens": {
+ "name": "Tokens",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "code": {
+ "name": "code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Tokens_userId_Users_id_fk": {
+ "name": "Tokens_userId_Users_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Tokens_applicationId_Applications_id_fk": {
+ "name": "Tokens_applicationId_Applications_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.UserToPinnedNotes": {
+ "name": "UserToPinnedNotes",
+ "schema": "",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "UserToPinnedNotes_userId_noteId_index": {
+ "name": "UserToPinnedNotes_userId_noteId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "UserToPinnedNotes_noteId_index": {
+ "name": "UserToPinnedNotes_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "UserToPinnedNotes_userId_Users_id_fk": {
+ "name": "UserToPinnedNotes_userId_Users_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "UserToPinnedNotes_noteId_Notes_id_fk": {
+ "name": "UserToPinnedNotes_noteId_Notes_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Users": {
+ "name": "Users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "is_admin": {
+ "name": "is_admin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "email_verification_token": {
+ "name": "email_verification_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password_reset_token": {
+ "name": "password_reset_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "fields": {
+ "name": "fields",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "endpoints": {
+ "name": "endpoints",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "source": {
+ "name": "source",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "avatar": {
+ "name": "avatar",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "header": {
+ "name": "header",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "is_bot": {
+ "name": "is_bot",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_locked": {
+ "name": "is_locked",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_discoverable": {
+ "name": "is_discoverable",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "sanctions": {
+ "name": "sanctions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "private_key": {
+ "name": "private_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "Users_uri_index": {
+ "name": "Users_uri_index",
+ "columns": [
+ {
+ "expression": "uri",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_username_index": {
+ "name": "Users_username_index",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_email_index": {
+ "name": "Users_email_index",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "Users_instanceId_Instances_id_fk": {
+ "name": "Users_instanceId_Instances_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Users_uri_unique": {
+ "name": "Users_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/drizzle/migrations/meta/0045_snapshot.json b/drizzle/migrations/meta/0045_snapshot.json
new file mode 100644
index 00000000..5ae7a518
--- /dev/null
+++ b/drizzle/migrations/meta/0045_snapshot.json
@@ -0,0 +1,2349 @@
+{
+ "id": "62854dae-5df9-4a44-a64e-87554de1da34",
+ "prevId": "e0c4fc7d-dded-4399-9859-fbaca1143721",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.Applications": {
+ "name": "Applications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "website": {
+ "name": "website",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "vapid_key": {
+ "name": "vapid_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scopes": {
+ "name": "scopes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "Applications_client_id_index": {
+ "name": "Applications_client_id_index",
+ "columns": [
+ {
+ "expression": "client_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Challenges": {
+ "name": "Challenges",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "challenge": {
+ "name": "challenge",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "NOW() + INTERVAL '5 minutes'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToNote": {
+ "name": "EmojiToNote",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToNote_emojiId_noteId_index": {
+ "name": "EmojiToNote_emojiId_noteId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToNote_noteId_index": {
+ "name": "EmojiToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToNote_emojiId_Emojis_id_fk": {
+ "name": "EmojiToNote_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToNote_noteId_Notes_id_fk": {
+ "name": "EmojiToNote_noteId_Notes_id_fk",
+ "tableFrom": "EmojiToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.EmojiToUser": {
+ "name": "EmojiToUser",
+ "schema": "",
+ "columns": {
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "EmojiToUser_emojiId_userId_index": {
+ "name": "EmojiToUser_emojiId_userId_index",
+ "columns": [
+ {
+ "expression": "emojiId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "EmojiToUser_userId_index": {
+ "name": "EmojiToUser_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "EmojiToUser_emojiId_Emojis_id_fk": {
+ "name": "EmojiToUser_emojiId_Emojis_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "EmojiToUser_userId_Users_id_fk": {
+ "name": "EmojiToUser_userId_Users_id_fk",
+ "tableFrom": "EmojiToUser",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Emojis": {
+ "name": "Emojis",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "shortcode": {
+ "name": "shortcode",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "visible_in_picker": {
+ "name": "visible_in_picker",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "category": {
+ "name": "category",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Emojis_mediaId_Medias_id_fk": {
+ "name": "Emojis_mediaId_Medias_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_instanceId_Instances_id_fk": {
+ "name": "Emojis_instanceId_Instances_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Emojis_ownerId_Users_id_fk": {
+ "name": "Emojis_ownerId_Users_id_fk",
+ "tableFrom": "Emojis",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.FilterKeywords": {
+ "name": "FilterKeywords",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "filterId": {
+ "name": "filterId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "keyword": {
+ "name": "keyword",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "whole_word": {
+ "name": "whole_word",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "FilterKeywords_filterId_Filters_id_fk": {
+ "name": "FilterKeywords_filterId_Filters_id_fk",
+ "tableFrom": "FilterKeywords",
+ "tableTo": "Filters",
+ "columnsFrom": ["filterId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Filters": {
+ "name": "Filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "context": {
+ "name": "context",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "filter_action": {
+ "name": "filter_action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Filters_userId_Users_id_fk": {
+ "name": "Filters_userId_Users_id_fk",
+ "tableFrom": "Filters",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Flags": {
+ "name": "Flags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "flag_type": {
+ "name": "flag_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'other'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Flags_noteId_Notes_id_fk": {
+ "name": "Flags_noteId_Notes_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Flags_userId_Users_id_fk": {
+ "name": "Flags_userId_Users_id_fk",
+ "tableFrom": "Flags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Instances": {
+ "name": "Instances",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "base_url": {
+ "name": "base_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "logo": {
+ "name": "logo",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "protocol": {
+ "name": "protocol",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'versia'"
+ },
+ "inbox": {
+ "name": "inbox",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "extensions": {
+ "name": "extensions",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Likes": {
+ "name": "Likes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "likerId": {
+ "name": "likerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "likedId": {
+ "name": "likedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Likes_likerId_Users_id_fk": {
+ "name": "Likes_likerId_Users_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Users",
+ "columnsFrom": ["likerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Likes_likedId_Notes_id_fk": {
+ "name": "Likes_likedId_Notes_id_fk",
+ "tableFrom": "Likes",
+ "tableTo": "Notes",
+ "columnsFrom": ["likedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Likes_uri_unique": {
+ "name": "Likes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Markers": {
+ "name": "Markers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "notificationId": {
+ "name": "notificationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timeline": {
+ "name": "timeline",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Markers_noteId_Notes_id_fk": {
+ "name": "Markers_noteId_Notes_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_notificationId_Notifications_id_fk": {
+ "name": "Markers_notificationId_Notifications_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Notifications",
+ "columnsFrom": ["notificationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Markers_userId_Users_id_fk": {
+ "name": "Markers_userId_Users_id_fk",
+ "tableFrom": "Markers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Medias": {
+ "name": "Medias",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "content": {
+ "name": "content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "original_content": {
+ "name": "original_content",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "thumbnail": {
+ "name": "thumbnail",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blurhash": {
+ "name": "blurhash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.MediasToNote": {
+ "name": "MediasToNote",
+ "schema": "",
+ "columns": {
+ "mediaId": {
+ "name": "mediaId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "MediasToNote_mediaId_index": {
+ "name": "MediasToNote_mediaId_index",
+ "columns": [
+ {
+ "expression": "mediaId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "MediasToNote_noteId_index": {
+ "name": "MediasToNote_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "MediasToNote_mediaId_Medias_id_fk": {
+ "name": "MediasToNote_mediaId_Medias_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Medias",
+ "columnsFrom": ["mediaId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "MediasToNote_noteId_Notes_id_fk": {
+ "name": "MediasToNote_noteId_Notes_id_fk",
+ "tableFrom": "MediasToNote",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModNotes": {
+ "name": "ModNotes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModNotes_noteId_Notes_id_fk": {
+ "name": "ModNotes_noteId_Notes_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_userId_Users_id_fk": {
+ "name": "ModNotes_userId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModNotes_modId_Users_id_fk": {
+ "name": "ModNotes_modId_Users_id_fk",
+ "tableFrom": "ModNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.ModTags": {
+ "name": "ModTags",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "modId": {
+ "name": "modId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag": {
+ "name": "tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "ModTags_noteId_Notes_id_fk": {
+ "name": "ModTags_noteId_Notes_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_userId_Users_id_fk": {
+ "name": "ModTags_userId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "ModTags_modId_Users_id_fk": {
+ "name": "ModTags_modId_Users_id_fk",
+ "tableFrom": "ModTags",
+ "tableTo": "Users",
+ "columnsFrom": ["modId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.NoteToMentions": {
+ "name": "NoteToMentions",
+ "schema": "",
+ "columns": {
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "NoteToMentions_noteId_userId_index": {
+ "name": "NoteToMentions_noteId_userId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "NoteToMentions_userId_index": {
+ "name": "NoteToMentions_userId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "NoteToMentions_noteId_Notes_id_fk": {
+ "name": "NoteToMentions_noteId_Notes_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "NoteToMentions_userId_Users_id_fk": {
+ "name": "NoteToMentions_userId_Users_id_fk",
+ "tableFrom": "NoteToMentions",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notes": {
+ "name": "Notes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reblogId": {
+ "name": "reblogId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'text/plain'"
+ },
+ "visibility": {
+ "name": "visibility",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replyId": {
+ "name": "replyId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "quoteId": {
+ "name": "quoteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sensitive": {
+ "name": "sensitive",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "spoiler_text": {
+ "name": "spoiler_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_source": {
+ "name": "content_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notes_authorId_Users_id_fk": {
+ "name": "Notes_authorId_Users_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_reblogId_Notes_id_fk": {
+ "name": "Notes_reblogId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["reblogId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_replyId_Notes_id_fk": {
+ "name": "Notes_replyId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["replyId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_quoteId_Notes_id_fk": {
+ "name": "Notes_quoteId_Notes_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Notes",
+ "columnsFrom": ["quoteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notes_applicationId_Applications_id_fk": {
+ "name": "Notes_applicationId_Applications_id_fk",
+ "tableFrom": "Notes",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Notes_uri_unique": {
+ "name": "Notes_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Notifications": {
+ "name": "Notifications",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "notifiedId": {
+ "name": "notifiedId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "accountId": {
+ "name": "accountId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dismissed": {
+ "name": "dismissed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Notifications_notifiedId_Users_id_fk": {
+ "name": "Notifications_notifiedId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["notifiedId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_accountId_Users_id_fk": {
+ "name": "Notifications_accountId_Users_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Users",
+ "columnsFrom": ["accountId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Notifications_noteId_Notes_id_fk": {
+ "name": "Notifications_noteId_Notes_id_fk",
+ "tableFrom": "Notifications",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdAccounts": {
+ "name": "OpenIdAccounts",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "server_id": {
+ "name": "server_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdAccounts_userId_Users_id_fk": {
+ "name": "OpenIdAccounts_userId_Users_id_fk",
+ "tableFrom": "OpenIdAccounts",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.OpenIdLoginFlows": {
+ "name": "OpenIdLoginFlows",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "code_verifier": {
+ "name": "code_verifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "issuer_id": {
+ "name": "issuer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "OpenIdLoginFlows_applicationId_Applications_id_fk": {
+ "name": "OpenIdLoginFlows_applicationId_Applications_id_fk",
+ "tableFrom": "OpenIdLoginFlows",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.PushSubscriptions": {
+ "name": "PushSubscriptions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "auth_secret": {
+ "name": "auth_secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "alerts": {
+ "name": "alerts",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "policy": {
+ "name": "policy",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "tokenId": {
+ "name": "tokenId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "PushSubscriptions_tokenId_Tokens_id_fk": {
+ "name": "PushSubscriptions_tokenId_Tokens_id_fk",
+ "tableFrom": "PushSubscriptions",
+ "tableTo": "Tokens",
+ "columnsFrom": ["tokenId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "PushSubscriptions_tokenId_unique": {
+ "name": "PushSubscriptions_tokenId_unique",
+ "nullsNotDistinct": false,
+ "columns": ["tokenId"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Reaction": {
+ "name": "Reaction",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emojiId": {
+ "name": "emojiId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "emoji_text": {
+ "name": "emoji_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "authorId": {
+ "name": "authorId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Reaction_emojiId_Emojis_id_fk": {
+ "name": "Reaction_emojiId_Emojis_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Emojis",
+ "columnsFrom": ["emojiId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_noteId_Notes_id_fk": {
+ "name": "Reaction_noteId_Notes_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Reaction_authorId_Users_id_fk": {
+ "name": "Reaction_authorId_Users_id_fk",
+ "tableFrom": "Reaction",
+ "tableTo": "Users",
+ "columnsFrom": ["authorId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Reaction_uri_unique": {
+ "name": "Reaction_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Relationships": {
+ "name": "Relationships",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "ownerId": {
+ "name": "ownerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subjectId": {
+ "name": "subjectId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "following": {
+ "name": "following",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "showing_reblogs": {
+ "name": "showing_reblogs",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "notifying": {
+ "name": "notifying",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "blocking": {
+ "name": "blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting": {
+ "name": "muting",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "muting_notifications": {
+ "name": "muting_notifications",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "requested": {
+ "name": "requested",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "domain_blocking": {
+ "name": "domain_blocking",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "endorsed": {
+ "name": "endorsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "languages": {
+ "name": "languages",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Relationships_ownerId_Users_id_fk": {
+ "name": "Relationships_ownerId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["ownerId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Relationships_subjectId_Users_id_fk": {
+ "name": "Relationships_subjectId_Users_id_fk",
+ "tableFrom": "Relationships",
+ "tableTo": "Users",
+ "columnsFrom": ["subjectId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.RoleToUsers": {
+ "name": "RoleToUsers",
+ "schema": "",
+ "columns": {
+ "roleId": {
+ "name": "roleId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "RoleToUsers_roleId_Roles_id_fk": {
+ "name": "RoleToUsers_roleId_Roles_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Roles",
+ "columnsFrom": ["roleId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "RoleToUsers_userId_Users_id_fk": {
+ "name": "RoleToUsers_userId_Users_id_fk",
+ "tableFrom": "RoleToUsers",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Roles": {
+ "name": "Roles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permissions": {
+ "name": "permissions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "visible": {
+ "name": "visible",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "icon": {
+ "name": "icon",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Tokens": {
+ "name": "Tokens",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "code": {
+ "name": "code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "redirect_uri": {
+ "name": "redirect_uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicationId": {
+ "name": "applicationId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Tokens_userId_Users_id_fk": {
+ "name": "Tokens_userId_Users_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "Tokens_applicationId_Applications_id_fk": {
+ "name": "Tokens_applicationId_Applications_id_fk",
+ "tableFrom": "Tokens",
+ "tableTo": "Applications",
+ "columnsFrom": ["applicationId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.UserToPinnedNotes": {
+ "name": "UserToPinnedNotes",
+ "schema": "",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "noteId": {
+ "name": "noteId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "UserToPinnedNotes_userId_noteId_index": {
+ "name": "UserToPinnedNotes_userId_noteId_index",
+ "columns": [
+ {
+ "expression": "userId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "UserToPinnedNotes_noteId_index": {
+ "name": "UserToPinnedNotes_noteId_index",
+ "columns": [
+ {
+ "expression": "noteId",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "UserToPinnedNotes_userId_Users_id_fk": {
+ "name": "UserToPinnedNotes_userId_Users_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Users",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ },
+ "UserToPinnedNotes_noteId_Notes_id_fk": {
+ "name": "UserToPinnedNotes_noteId_Notes_id_fk",
+ "tableFrom": "UserToPinnedNotes",
+ "tableTo": "Notes",
+ "columnsFrom": ["noteId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.Users": {
+ "name": "Users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "uuid_generate_v7()"
+ },
+ "uri": {
+ "name": "uri",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "is_admin": {
+ "name": "is_admin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "email_verification_token": {
+ "name": "email_verification_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password_reset_token": {
+ "name": "password_reset_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "fields": {
+ "name": "fields",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "endpoints": {
+ "name": "endpoints",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "source": {
+ "name": "source",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "avatarId": {
+ "name": "avatarId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "headerId": {
+ "name": "headerId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp(3)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "is_bot": {
+ "name": "is_bot",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_locked": {
+ "name": "is_locked",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_discoverable": {
+ "name": "is_discoverable",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "sanctions": {
+ "name": "sanctions",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "public_key": {
+ "name": "public_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "private_key": {
+ "name": "private_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "instanceId": {
+ "name": "instanceId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "disable_automoderation": {
+ "name": "disable_automoderation",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "Users_uri_index": {
+ "name": "Users_uri_index",
+ "columns": [
+ {
+ "expression": "uri",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_username_index": {
+ "name": "Users_username_index",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "Users_email_index": {
+ "name": "Users_email_index",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "Users_avatarId_Medias_id_fk": {
+ "name": "Users_avatarId_Medias_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Medias",
+ "columnsFrom": ["avatarId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ },
+ "Users_headerId_Medias_id_fk": {
+ "name": "Users_headerId_Medias_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Medias",
+ "columnsFrom": ["headerId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "cascade"
+ },
+ "Users_instanceId_Instances_id_fk": {
+ "name": "Users_instanceId_Instances_id_fk",
+ "tableFrom": "Users",
+ "tableTo": "Instances",
+ "columnsFrom": ["instanceId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "Users_uri_unique": {
+ "name": "Users_uri_unique",
+ "nullsNotDistinct": false,
+ "columns": ["uri"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/drizzle/migrations/meta/_journal.json b/drizzle/migrations/meta/_journal.json
index 2c5ef68c..f820f501 100644
--- a/drizzle/migrations/meta/_journal.json
+++ b/drizzle/migrations/meta/_journal.json
@@ -295,6 +295,34 @@
"when": 1737644734501,
"tag": "0041_bright_doctor_spectrum",
"breakpoints": true
+ },
+ {
+ "idx": 42,
+ "version": "7",
+ "when": 1737660317024,
+ "tag": "0042_swift_the_phantom",
+ "breakpoints": true
+ },
+ {
+ "idx": 43,
+ "version": "7",
+ "when": 1738080562679,
+ "tag": "0043_mute_jigsaw",
+ "breakpoints": true
+ },
+ {
+ "idx": 44,
+ "version": "7",
+ "when": 1738082427051,
+ "tag": "0044_quiet_jasper_sitwell",
+ "breakpoints": true
+ },
+ {
+ "idx": 45,
+ "version": "7",
+ "when": 1738087527661,
+ "tag": "0045_polite_mikhail_rasputin",
+ "breakpoints": true
}
]
}
diff --git a/drizzle/schema.ts b/drizzle/schema.ts
index aad1e069..aa3d47f7 100644
--- a/drizzle/schema.ts
+++ b/drizzle/schema.ts
@@ -52,10 +52,13 @@ export const Challenges = pgTable("Challenges", {
export const Emojis = pgTable("Emojis", {
id: id(),
shortcode: text("shortcode").notNull(),
- url: text("url").notNull(),
+ mediaId: uuid("mediaId")
+ .references(() => Medias.id, {
+ onDelete: "cascade",
+ onUpdate: "cascade",
+ })
+ .notNull(),
visibleInPicker: boolean("visible_in_picker").notNull(),
- alt: text("alt"),
- contentType: text("content_type").notNull(),
instanceId: uuid("instanceId").references(() => Instances.id, {
onDelete: "cascade",
onUpdate: "cascade",
@@ -67,6 +70,19 @@ export const Emojis = pgTable("Emojis", {
category: text("category"),
});
+export const EmojisRelations = relations(Emojis, ({ one, many }) => ({
+ media: one(Medias, {
+ fields: [Emojis.mediaId],
+ references: [Medias.id],
+ }),
+ instance: one(Instances, {
+ fields: [Emojis.instanceId],
+ references: [Instances.id],
+ }),
+ users: many(EmojiToUser),
+ notes: many(EmojiToNote),
+}));
+
export const PushSubscriptions = pgTable("PushSubscriptions", {
id: id(),
endpoint: text("endpoint").notNull(),
@@ -231,6 +247,17 @@ export const Likes = pgTable("Likes", {
createdAt: createdAt(),
});
+export const LikesRelations = relations(Likes, ({ one }) => ({
+ liker: one(Users, {
+ fields: [Likes.likerId],
+ references: [Users.id],
+ }),
+ liked: one(Notes, {
+ fields: [Likes.likedId],
+ references: [Notes.id],
+ }),
+}));
+
export const Relationships = pgTable("Relationships", {
id: id(),
ownerId: uuid("ownerId")
@@ -260,6 +287,19 @@ export const Relationships = pgTable("Relationships", {
updatedAt: updatedAt(),
});
+export const RelationshipsRelations = relations(Relationships, ({ one }) => ({
+ owner: one(Users, {
+ fields: [Relationships.ownerId],
+ references: [Users.id],
+ relationName: "RelationshipToOwner",
+ }),
+ subject: one(Users, {
+ fields: [Relationships.subjectId],
+ references: [Users.id],
+ relationName: "RelationshipToSubject",
+ }),
+}));
+
export const Applications = pgTable(
"Applications",
{
@@ -303,26 +343,36 @@ export const Tokens = pgTable("Tokens", {
}),
});
+export const TokensRelations = relations(Tokens, ({ one }) => ({
+ user: one(Users, {
+ fields: [Tokens.userId],
+ references: [Users.id],
+ }),
+ application: one(Applications, {
+ fields: [Tokens.applicationId],
+ references: [Applications.id],
+ }),
+}));
+
export const Medias = pgTable("Medias", {
id: id(),
- url: text("url").notNull(),
- remoteUrl: text("remote_url"),
- thumbnailUrl: text("thumbnail_url"),
- mimeType: text("mime_type").notNull(),
- description: text("description"),
+ content: jsonb("content").notNull().$type(),
+ originalContent: jsonb("original_content").$type(),
+ thumbnail: jsonb("thumbnail").$type(),
blurhash: text("blurhash"),
- sha256: text("sha256"),
- fps: integer("fps"),
- duration: integer("duration"),
- width: integer("width"),
- height: integer("height"),
- size: integer("size"),
- noteId: uuid("noteId").references(() => Notes.id, {
- onDelete: "cascade",
- onUpdate: "cascade",
- }),
});
+export const MediasRelations = relations(Medias, ({ many }) => ({
+ notes: many(Notes),
+ emojis: many(Emojis),
+ avatars: many(Users, {
+ relationName: "UserToAvatar",
+ }),
+ headers: many(Users, {
+ relationName: "UserToHeader",
+ }),
+}));
+
export const Notifications = pgTable("Notifications", {
id: id(),
type: text("type").notNull(),
@@ -346,6 +396,23 @@ export const Notifications = pgTable("Notifications", {
dismissed: boolean("dismissed").default(false).notNull(),
});
+export const NotificationsRelations = relations(Notifications, ({ one }) => ({
+ account: one(Users, {
+ fields: [Notifications.accountId],
+ references: [Users.id],
+ relationName: "NotificationToAccount",
+ }),
+ notified: one(Users, {
+ fields: [Notifications.notifiedId],
+ references: [Users.id],
+ relationName: "NotificationToNotified",
+ }),
+ note: one(Notes, {
+ fields: [Notifications.noteId],
+ references: [Notes.id],
+ }),
+}));
+
export const Notes = pgTable("Notes", {
id: id(),
uri: uri(),
@@ -381,6 +448,50 @@ export const Notes = pgTable("Notes", {
contentSource: text("content_source").default("").notNull(),
});
+export const NotesRelations = relations(Notes, ({ many, one }) => ({
+ emojis: many(EmojiToNote),
+ author: one(Users, {
+ fields: [Notes.authorId],
+ references: [Users.id],
+ relationName: "NoteToAuthor",
+ }),
+ attachments: many(MediasToNotes, {
+ relationName: "AttachmentToNote",
+ }),
+ mentions: many(NoteToMentions),
+ reblog: one(Notes, {
+ fields: [Notes.reblogId],
+ references: [Notes.id],
+ relationName: "NoteToReblogs",
+ }),
+ usersThatHavePinned: many(UserToPinnedNotes),
+ reply: one(Notes, {
+ fields: [Notes.replyId],
+ references: [Notes.id],
+ relationName: "NoteToReplies",
+ }),
+ quote: one(Notes, {
+ fields: [Notes.quotingId],
+ references: [Notes.id],
+ relationName: "NoteToQuotes",
+ }),
+ application: one(Applications, {
+ fields: [Notes.applicationId],
+ references: [Applications.id],
+ }),
+ quotes: many(Notes, {
+ relationName: "NoteToQuotes",
+ }),
+ replies: many(Notes, {
+ relationName: "NoteToReplies",
+ }),
+ likes: many(Likes),
+ reblogs: many(Notes, {
+ relationName: "NoteToReblogs",
+ }),
+ notifications: many(Notifications),
+}));
+
export const Instances = pgTable("Instances", {
id: id(),
baseUrl: text("base_url").notNull(),
@@ -399,6 +510,11 @@ export const Instances = pgTable("Instances", {
extensions: jsonb("extensions").$type(),
});
+export const InstancesRelations = relations(Instances, ({ many }) => ({
+ users: many(Users),
+ emojis: many(Emojis),
+}));
+
export const OpenIdAccounts = pgTable("OpenIdAccounts", {
id: id(),
userId: uuid("userId").references(() => Users.id, {
@@ -447,8 +563,14 @@ export const Users = pgTable(
};
}
>(),
- avatar: text("avatar").notNull(),
- header: text("header").notNull(),
+ avatarId: uuid("avatarId").references(() => Medias.id, {
+ onDelete: "set null",
+ onUpdate: "cascade",
+ }),
+ headerId: uuid("headerId").references(() => Medias.id, {
+ onDelete: "set null",
+ onUpdate: "cascade",
+ }),
createdAt: createdAt(),
updatedAt: updatedAt(),
isBot: boolean("is_bot").default(false).notNull(),
@@ -472,6 +594,48 @@ export const Users = pgTable(
],
);
+export const UsersRelations = relations(Users, ({ many, one }) => ({
+ emojis: many(EmojiToUser),
+ pinnedNotes: many(UserToPinnedNotes),
+ notes: many(Notes, {
+ relationName: "NoteToAuthor",
+ }),
+ avatar: one(Medias, {
+ fields: [Users.avatarId],
+ references: [Medias.id],
+ relationName: "UserToAvatar",
+ }),
+ header: one(Medias, {
+ fields: [Users.headerId],
+ references: [Medias.id],
+ relationName: "UserToHeader",
+ }),
+ likes: many(Likes),
+ relationships: many(Relationships, {
+ relationName: "RelationshipToOwner",
+ }),
+ relationshipSubjects: many(Relationships, {
+ relationName: "RelationshipToSubject",
+ }),
+ notificationsMade: many(Notifications, {
+ relationName: "NotificationToAccount",
+ }),
+ notificationsReceived: many(Notifications, {
+ relationName: "NotificationToNotified",
+ }),
+ openIdAccounts: many(OpenIdAccounts),
+ flags: many(Flags),
+ modNotes: many(ModNotes),
+ modTags: many(ModTags),
+ tokens: many(Tokens),
+ instance: one(Instances, {
+ fields: [Users.instanceId],
+ references: [Instances.id],
+ }),
+ mentionedIn: many(NoteToMentions),
+ roles: many(RoleToUsers),
+}));
+
export const OpenIdLoginFlows = pgTable("OpenIdLoginFlows", {
id: id(),
codeVerifier: text("code_verifier").notNull(),
@@ -755,6 +919,17 @@ export const EmojiToNote = pgTable(
],
);
+export const EmojisToNotesRelations = relations(EmojiToNote, ({ one }) => ({
+ emoji: one(Emojis, {
+ fields: [EmojiToNote.emojiId],
+ references: [Emojis.id],
+ }),
+ note: one(Notes, {
+ fields: [EmojiToNote.noteId],
+ references: [Notes.id],
+ }),
+}));
+
export const NoteToMentions = pgTable(
"NoteToMentions",
{
@@ -777,6 +952,20 @@ export const NoteToMentions = pgTable(
],
);
+export const NotesToMentionsRelations = relations(
+ NoteToMentions,
+ ({ one }) => ({
+ note: one(Notes, {
+ fields: [NoteToMentions.noteId],
+ references: [Notes.id],
+ }),
+ user: one(Users, {
+ fields: [NoteToMentions.userId],
+ references: [Users.id],
+ }),
+ }),
+);
+
export const UserToPinnedNotes = pgTable(
"UserToPinnedNotes",
{
@@ -799,80 +988,6 @@ export const UserToPinnedNotes = pgTable(
],
);
-export const AttachmentsRelations = relations(Medias, ({ one }) => ({
- notes: one(Notes, {
- fields: [Medias.noteId],
- references: [Notes.id],
- }),
-}));
-
-export const UsersRelations = relations(Users, ({ many, one }) => ({
- emojis: many(EmojiToUser),
- pinnedNotes: many(UserToPinnedNotes),
- notes: many(Notes, {
- relationName: "NoteToAuthor",
- }),
- likes: many(Likes),
- relationships: many(Relationships, {
- relationName: "RelationshipToOwner",
- }),
- relationshipSubjects: many(Relationships, {
- relationName: "RelationshipToSubject",
- }),
- notificationsMade: many(Notifications, {
- relationName: "NotificationToAccount",
- }),
- notificationsReceived: many(Notifications, {
- relationName: "NotificationToNotified",
- }),
- openIdAccounts: many(OpenIdAccounts),
- flags: many(Flags),
- modNotes: many(ModNotes),
- modTags: many(ModTags),
- tokens: many(Tokens),
- instance: one(Instances, {
- fields: [Users.instanceId],
- references: [Instances.id],
- }),
- mentionedIn: many(NoteToMentions),
- roles: many(RoleToUsers),
-}));
-
-export const RelationshipsRelations = relations(Relationships, ({ one }) => ({
- owner: one(Users, {
- fields: [Relationships.ownerId],
- references: [Users.id],
- relationName: "RelationshipToOwner",
- }),
- subject: one(Users, {
- fields: [Relationships.subjectId],
- references: [Users.id],
- relationName: "RelationshipToSubject",
- }),
-}));
-
-export const TokensRelations = relations(Tokens, ({ one }) => ({
- user: one(Users, {
- fields: [Tokens.userId],
- references: [Users.id],
- }),
- application: one(Applications, {
- fields: [Tokens.applicationId],
- references: [Applications.id],
- }),
-}));
-
-export const NotesToUsersRelations = relations(NoteToMentions, ({ one }) => ({
- note: one(Notes, {
- fields: [NoteToMentions.noteId],
- references: [Notes.id],
- }),
- user: one(Users, {
- fields: [NoteToMentions.userId],
- references: [Users.id],
- }),
-}));
-
export const UserToPinnedNotesRelations = relations(
UserToPinnedNotes,
({ one }) => ({
@@ -887,97 +1002,33 @@ export const UserToPinnedNotesRelations = relations(
}),
);
-export const NotesRelations = relations(Notes, ({ many, one }) => ({
- emojis: many(EmojiToNote),
- author: one(Users, {
- fields: [Notes.authorId],
- references: [Users.id],
- relationName: "NoteToAuthor",
- }),
- attachments: many(Medias),
- mentions: many(NoteToMentions),
- reblog: one(Notes, {
- fields: [Notes.reblogId],
- references: [Notes.id],
- relationName: "NoteToReblogs",
- }),
- usersThatHavePinned: many(UserToPinnedNotes),
- reply: one(Notes, {
- fields: [Notes.replyId],
- references: [Notes.id],
- relationName: "NoteToReplies",
- }),
- quote: one(Notes, {
- fields: [Notes.quotingId],
- references: [Notes.id],
- relationName: "NoteToQuotes",
- }),
- application: one(Applications, {
- fields: [Notes.applicationId],
- references: [Applications.id],
- }),
- quotes: many(Notes, {
- relationName: "NoteToQuotes",
- }),
- replies: many(Notes, {
- relationName: "NoteToReplies",
- }),
- likes: many(Likes),
- reblogs: many(Notes, {
- relationName: "NoteToReblogs",
- }),
- notifications: many(Notifications),
-}));
+export const MediasToNotes = pgTable(
+ "MediasToNote",
+ {
+ mediaId: uuid("mediaId")
+ .notNull()
+ .references(() => Medias.id, {
+ onDelete: "cascade",
+ onUpdate: "cascade",
+ }),
+ noteId: uuid("noteId")
+ .notNull()
+ .references(() => Notes.id, {
+ onDelete: "cascade",
+ onUpdate: "cascade",
+ }),
+ },
+ (table) => [index().on(table.mediaId), index().on(table.noteId)],
+);
-export const NotificationsRelations = relations(Notifications, ({ one }) => ({
- account: one(Users, {
- fields: [Notifications.accountId],
- references: [Users.id],
- relationName: "NotificationToAccount",
- }),
- notified: one(Users, {
- fields: [Notifications.notifiedId],
- references: [Users.id],
- relationName: "NotificationToNotified",
+export const MediasToNotesRelations = relations(MediasToNotes, ({ one }) => ({
+ media: one(Medias, {
+ fields: [MediasToNotes.mediaId],
+ references: [Medias.id],
}),
note: one(Notes, {
- fields: [Notifications.noteId],
- references: [Notes.id],
- }),
-}));
-
-export const LikesRelations = relations(Likes, ({ one }) => ({
- liker: one(Users, {
- fields: [Likes.likerId],
- references: [Users.id],
- }),
- liked: one(Notes, {
- fields: [Likes.likedId],
- references: [Notes.id],
- }),
-}));
-
-export const EmojisRelations = relations(Emojis, ({ one, many }) => ({
- instance: one(Instances, {
- fields: [Emojis.instanceId],
- references: [Instances.id],
- }),
- users: many(EmojiToUser),
- notes: many(EmojiToNote),
-}));
-
-export const InstancesRelations = relations(Instances, ({ many }) => ({
- users: many(Users),
- emojis: many(Emojis),
-}));
-
-export const EmojisToNotesRelations = relations(EmojiToNote, ({ one }) => ({
- emoji: one(Emojis, {
- fields: [EmojiToNote.emojiId],
- references: [Emojis.id],
- }),
- note: one(Notes, {
- fields: [EmojiToNote.noteId],
+ fields: [MediasToNotes.noteId],
references: [Notes.id],
+ relationName: "AttachmentToNote",
}),
}));
diff --git a/package.json b/package.json
index 105fb938..cdc60234 100644
--- a/package.json
+++ b/package.json
@@ -81,20 +81,20 @@
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
- "@types/bun": "^1.2.0",
+ "@types/bun": "^1.2.1",
"@types/cli-progress": "^3.11.6",
"@types/cli-table": "^0.3.4",
"@types/html-to-text": "^9.0.4",
"@types/jsonld": "^1.5.15",
"@types/markdown-it-container": "^2.0.10",
"@types/mime-types": "^2.1.4",
- "@types/pg": "^8.11.10",
+ "@types/pg": "^8.11.11",
"@types/qs": "^6.9.18",
"@types/web-push": "^3.6.4",
- "drizzle-kit": "^0.30.2",
+ "drizzle-kit": "^0.30.3",
"markdown-it-image-figures": "^2.1.1",
"markdown-it-mathjax3": "^4.3.2",
- "oclif": "^4.17.17",
+ "oclif": "^4.17.20",
"ts-prune": "^0.10.3",
"typescript": "^5.7.3",
"vitepress": "^1.6.3",
@@ -107,7 +107,6 @@
"typescript": "^5.7.2"
},
"dependencies": {
- "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@0.8.0",
"@bull-board/api": "^6.7.1",
"@bull-board/hono": "^6.7.1",
"@hackmd/markdown-it-task-lists": "^2.1.4",
@@ -120,22 +119,22 @@
"@json2csv/plainjs": "^7.0.6",
"@logtape/logtape": "npm:@jsr/logtape__logtape@0.9.0-dev.114+327c9473",
"@oclif/core": "^4.2.4",
- "@sentry/bun": "^8.51.0",
+ "@sentry/bun": "^8.52.0",
"@tufjs/canonical-json": "^2.0.0",
"@versia/client": "^0.1.5",
"@versia/federation": "^0.1.4",
"@versia/kit": "workspace:*",
"altcha-lib": "^1.2.0",
"blurhash": "^2.0.5",
- "bullmq": "^5.35.1",
+ "bullmq": "^5.38.0",
"c12": "^2.0.1",
"chalk": "^5.4.1",
"cli-progress": "^3.12.0",
"cli-table": "^0.3.11",
"confbox": "^0.1.8",
- "drizzle-orm": "^0.38.4",
+ "drizzle-orm": "^0.39.0",
"extract-zip": "^2.0.1",
- "hono": "^4.6.18",
+ "hono": "^4.6.19",
"html-to-text": "^9.0.5",
"ioredis": "^5.4.2",
"ip-matching": "^2.1.2",
diff --git a/packages/config-manager/config.type.ts b/packages/config-manager/config.type.ts
index 7156be24..91974f6b 100644
--- a/packages/config-manager/config.type.ts
+++ b/packages/config-manager/config.type.ts
@@ -276,14 +276,7 @@ export const configValidator = z
public_url: zUrl,
})
.strict()
- .default({
- endpoint: "",
- access_key: "",
- secret_access_key: "",
- region: undefined,
- bucket_name: "versia",
- public_url: "https://cdn.example.com",
- }),
+ .optional(),
validation: z
.object({
max_displayname_size: z.number().int().default(50),
@@ -854,6 +847,11 @@ export const configValidator = z
.strict()
.optional(),
})
- .strict();
+ .strict()
+ .refine(
+ // If media backend is S3, s3 config must be set
+ (arg) => arg.media.backend === MediaBackendType.Local || !!arg.s3,
+ "S3 config must be set when using S3 media backend",
+ );
export type Config = z.infer;
diff --git a/packages/plugin-kit/exports/db.ts b/packages/plugin-kit/exports/db.ts
index 4b00aa20..5f3ad757 100644
--- a/packages/plugin-kit/exports/db.ts
+++ b/packages/plugin-kit/exports/db.ts
@@ -1,7 +1,7 @@
// biome-ignore lint/performance/noBarrelFile:
export { User } from "~/classes/database/user.ts";
export { Role } from "~/classes/database/role.ts";
-export { Media } from "~/classes/database/attachment.ts";
+export { Media } from "~/classes/database/media";
export { Emoji } from "~/classes/database/emoji.ts";
export { Instance } from "~/classes/database/instance.ts";
export { Note } from "~/classes/database/note.ts";
diff --git a/plugins/openid/routes/oauth/callback.ts b/plugins/openid/routes/oauth/callback.ts
index 3af10035..c9a1c159 100644
--- a/plugins/openid/routes/oauth/callback.ts
+++ b/plugins/openid/routes/oauth/callback.ts
@@ -1,7 +1,6 @@
-import { mimeLookup } from "@/content_types.ts";
import { randomString } from "@/math.ts";
import { createRoute, z } from "@hono/zod-openapi";
-import { Token, User, db } from "@versia/kit/db";
+import { Media, Token, User, db } from "@versia/kit/db";
import { type SQL, and, eq, isNull } from "@versia/kit/drizzle";
import { OpenIdAccounts, RolePermissions, Users } from "@versia/kit/tables";
import { setCookie } from "hono/cookie";
@@ -243,16 +242,15 @@ export default (plugin: PluginType): void => {
? !!(await User.fromSql(eq(Users.email, email)))
: false;
+ const avatar = picture
+ ? await Media.fromUrl(new URL(picture))
+ : null;
+
// Create new user
const user = await User.fromDataLocal({
email: doesEmailExist ? undefined : email,
username,
- avatar: picture
- ? {
- url: picture,
- content_type: await mimeLookup(picture),
- }
- : undefined,
+ avatar: avatar ?? undefined,
password: undefined,
});
diff --git a/utils/content_types.ts b/utils/content_types.ts
index 5dece767..b67b67a0 100644
--- a/utils/content_types.ts
+++ b/utils/content_types.ts
@@ -57,8 +57,11 @@ export const urlToContentFormat = (
};
};
-export const mimeLookup = (url: string): Promise => {
- const naiveLookup = lookup(url.replace(new URL(url).search, ""));
+export const mimeLookup = (url: URL): Promise => {
+ const urlWithoutSearch = url.toString().replace(url.search, "");
+
+ // Strip query params from URL to get the proper file extension
+ const naiveLookup = lookup(urlWithoutSearch);
if (naiveLookup) {
return Promise.resolve(naiveLookup);