diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 66db3267e6..3c2f02872c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,15 @@ --- version: 2 updates: + # ignore all updates for the @liexp/packages + - package-ecosystem: "npm" + directories: + - "/packages/@liexp/*" + schedule: + interval: "daily" + ignore: + - dependency-name: "*" + - package-ecosystem: "npm" directories: - "/" @@ -11,6 +20,8 @@ updates: - "/packages/@liexp/ui" - "/services/api" - "/services/web" + - "/services/ai-bot" + - "/services/worker" - "/services/admin-web" - "/services/storybook" schedule: diff --git a/.github/workflows/packages-pull-request.yml b/.github/workflows/packages-pull-request.yml index a690714411..5f72b030dd 100644 --- a/.github/workflows/packages-pull-request.yml +++ b/.github/workflows/packages-pull-request.yml @@ -30,6 +30,7 @@ jobs: pnpm core lint pnpm shared lint pnpm test lint + pnpm backend lint pnpm ui lint - name: Run tests @@ -37,3 +38,4 @@ jobs: DEBUG: "-@liexp*" run: | pnpm shared test + pnpm backend test diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000000..a5f5bec243 --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,20 @@ +// Folder-specific settings +// +// For a full list of overridable settings, and general information on folder-specific settings, +// see the documentation: https://zed.dev/docs/configuring-zed#settings-files +{ + "file_scan_exclusions": [ + "**/.git", + "**/.svn", + "**/.hg", + "**/.jj", + "**/CVS", + "**/.DS_Store", + "**/Thumbs.db", + "**/.classpath", + "**/.settings", + "**/lib", + "**/build", + "**/node_modules" + ] +} diff --git a/compose.yml b/compose.yml index c808081513..12462ffb72 100644 --- a/compose.yml +++ b/compose.yml @@ -81,6 +81,7 @@ services: - api-node-modules:/usr/src/app/node_modules - ./packages/@liexp:/usr/src/app/packages/@liexp:ro - ./services/api:/usr/src/app/services/api:cached + - ./services/worker/config:/usr/src/app/services/api/config:ro working_dir: /usr/src/app/services/api api.liexp.dev: @@ -124,7 +125,8 @@ services: - worker-node-modules:/usr/src/app/node_modules - ./packages/@liexp:/usr/src/app/packages/@liexp:ro - ./services/worker:/usr/src/app/services/worker:ro - - ./services/worker/temp:/usr/src/app/services/worker/temp:rw + - ./services/worker/config:/usr/src/app/services/worker/config:cached + - ./services/worker/temp:/usr/src/app/services/worker/temp:cached mem_limit: 512M restart: always networks: diff --git a/deploy/compose.yml b/deploy/compose.yml index 8b61ebbde7..526638376c 100644 --- a/deploy/compose.yml +++ b/deploy/compose.yml @@ -28,6 +28,7 @@ services: timeout: 10s retries: 10 start_period: 30s + restart: always mem_limit: 1G depends_on: - redis @@ -35,6 +36,7 @@ services: be-worker: image: ghcr.io/lies-exposed/liexp-worker:alpha-latest container_name: liexp-be-worker + restart: always environment: TG_BOT_POLLING: "true" REDIS_HOST: "127.0.0.1" diff --git a/lies.exposed.code-workspace b/lies.exposed.code-workspace index 0910aba2d8..8d3f0d851e 100644 --- a/lies.exposed.code-workspace +++ b/lies.exposed.code-workspace @@ -63,6 +63,7 @@ "**/bower_components": true, "**/*.code-search": true, "build/**": true, + "coverage/**": true, "lib/**": true, }, "eslint.workingDirectories": [ diff --git a/package.json b/package.json index aa2cfdc73c..edb9949eb6 100644 --- a/package.json +++ b/package.json @@ -43,17 +43,17 @@ "devDependencies": { "@commitlint/cli": "^19.6.0", "@commitlint/config-conventional": "^19.6.0", - "@types/node": "^22.10.2", + "@types/node": "^22.10.7", "@vitest/coverage-v8": "^2.1.8", "eslint": "^9.18.0", "husky": "^9.1.7", "knip": "^5.39.4", "lint-staged": "^15.2.11", "typescript": "^5.6.3", - "typescript-eslint": "^8.18.0", - "vitest": "^2.1.8" + "typescript-eslint": "^8.20.0", + "vitest": "^3.0.3" }, - "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c", + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0", "engines": { "node": ">= 22", "npm": "please use pnpm >= 9", diff --git a/packages/@liexp/backend/package.json b/packages/@liexp/backend/package.json index 28e4ce4ff0..b657aec749 100644 --- a/packages/@liexp/backend/package.json +++ b/packages/@liexp/backend/package.json @@ -24,9 +24,9 @@ "src/**/*.(ts|tsx|js|jsx)": "eslint --fix" }, "dependencies": { - "@aws-sdk/client-s3": "^3.726.1", - "@aws-sdk/lib-storage": "^3.726.1", - "@aws-sdk/s3-request-presigner": "^3.726.1", + "@aws-sdk/client-s3": "^3.732.0", + "@aws-sdk/lib-storage": "^3.732.0", + "@aws-sdk/s3-request-presigner": "^3.732.0", "@databases/escape-identifier": "^1.0.3", "@databases/sql": "^3.3.0", "@liexp/core": "workspace:*", @@ -43,8 +43,8 @@ }, "devDependencies": { "@liexp/test": "workspace:*", - "@aws-sdk/types": "^3.723.0", - "@langchain/core": "^0.3.29", + "@aws-sdk/types": "^3.731.0", + "@langchain/core": "^0.3.30", "@langchain/openai": "^0.3.17", "@types/fluent-ffmpeg": "^2.1.27", "@types/jsdom": "^21.1.7", @@ -60,7 +60,7 @@ "puppeteer-extra-plugin-stealth": "^2.11.2", "typescript": "^5.6.2", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^2.1.8", + "vitest": "^3.0.3", "vitest-mock-extended": "^2.0.2" }, "peerDependencies": { @@ -83,5 +83,5 @@ "wink-nlp": "^2.3.0", "wink-nlp-utils": "^2.1.0" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/packages/@liexp/backend/src/context/api.context.ts b/packages/@liexp/backend/src/context/api.context.ts index f91b585dfc..bc4b3a9afc 100644 --- a/packages/@liexp/backend/src/context/api.context.ts +++ b/packages/@liexp/backend/src/context/api.context.ts @@ -1,5 +1,5 @@ import { type Endpoints } from "@liexp/shared/lib/endpoints/index.js"; -import { type EndpointsRESTClient } from "@liexp/shared/lib/providers/EndpointsRESTClient/types"; +import { type EndpointsRESTClient } from "@liexp/shared/lib/providers/EndpointsRESTClient/types.js"; export interface APIContext { api: EndpointsRESTClient; diff --git a/packages/@liexp/backend/src/context/index.ts b/packages/@liexp/backend/src/context/index.ts index 105aa6dca1..afdd6d2d8b 100644 --- a/packages/@liexp/backend/src/context/index.ts +++ b/packages/@liexp/backend/src/context/index.ts @@ -1,4 +1,3 @@ -import { type URLMetadataClient } from "../providers/URLMetadata.provider.js"; import { type FFMPEGProvider } from "../providers/ffmpeg/ffmpeg.provider.js"; import { type GeocodeProvider } from "../providers/geocode/geocode.provider.js"; import { type IGProvider } from "../providers/ig/ig.provider.js"; @@ -7,10 +6,6 @@ import { type NERProvider } from "../providers/ner/ner.provider.js"; import { type TGBotProvider } from "../providers/tg/tg.provider.js"; import { type WikipediaProvider } from "../providers/wikipedia/wikipedia.provider.js"; -export interface URLMetadataContext { - urlMetadata: URLMetadataClient; -} - export interface FFMPEGProviderContext { ffmpeg: FFMPEGProvider; } diff --git a/packages/@liexp/backend/src/context/urlMetadata.context.ts b/packages/@liexp/backend/src/context/urlMetadata.context.ts new file mode 100644 index 0000000000..8a0a537159 --- /dev/null +++ b/packages/@liexp/backend/src/context/urlMetadata.context.ts @@ -0,0 +1,5 @@ +import type { URLMetadataClient } from "../providers/URLMetadata.provider.js"; + +export interface URLMetadataContext { + urlMetadata: URLMetadataClient; +} diff --git a/packages/@liexp/backend/src/errors/index.ts b/packages/@liexp/backend/src/errors/index.ts index 058c4917a2..28c5aa9585 100644 --- a/packages/@liexp/backend/src/errors/index.ts +++ b/packages/@liexp/backend/src/errors/index.ts @@ -3,4 +3,4 @@ export * from "./NotAuthorizedError.js"; export * from "./NotFoundError.js"; export * from "./ServerError.js"; -export { IOError } from "ts-io-error/lib/index.js"; +export { IOError } from "ts-io-error"; diff --git a/packages/@liexp/backend/src/flows/admin/nlp/upsertEntities.flow.ts b/packages/@liexp/backend/src/flows/admin/nlp/upsertEntities.flow.ts index cc0c2c4e57..39be5af40e 100644 --- a/packages/@liexp/backend/src/flows/admin/nlp/upsertEntities.flow.ts +++ b/packages/@liexp/backend/src/flows/admin/nlp/upsertEntities.flow.ts @@ -18,6 +18,7 @@ import { type DBError } from "../../../providers/orm/database.provider.js"; import { fetchActors } from "../../../queries/actors/fetchActors.query.js"; import { fetchGroups } from "../../../queries/groups/fetchGroups.query.js"; import { fetchKeywords } from "../../../queries/keywords/fetchKeywords.query.js"; +import { ensureFolderExists } from "../../fs/ensureFolderExists.flow.js"; const makePatterns = (s: string, acronym: boolean): string[] => { const chunks = s.split(" "); @@ -130,7 +131,8 @@ export const upsertNLPEntities = < ]; return pipe( - ctx.fs.writeObject(nplConfig, JSON.stringify(entities, null, 4)), + ensureFolderExists(ctx.config.dirs.config.nlp)(ctx), + TE.chain(() => ctx.fs.writeObject(nplConfig, JSON.stringify(entities))), TE.map(() => entities), TE.mapLeft(ServerError.fromUnknown), ); diff --git a/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.spec.ts b/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.spec.ts new file mode 100644 index 0000000000..07fff8ffe1 --- /dev/null +++ b/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.spec.ts @@ -0,0 +1,132 @@ +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; +import { uuid } from "@liexp/shared/lib/io/http/Common/UUID.js"; +import { SCIENTIFIC_STUDY } from "@liexp/shared/lib/io/http/Events/EventType.js"; +import { HumanReadableStringArb } from "@liexp/shared/lib/tests/arbitrary/HumanReadableString.arbitrary.js"; +import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; +import { sanitizeURL } from "@liexp/shared/lib/utils/url.utils.js"; +import { fc } from "@liexp/test"; +import { describe, expect, it } from "vitest"; +import { mockDeep } from "vitest-mock-extended"; +import { EventV2Entity } from "../../entities/Event.v2.entity.js"; +import { UserEntity } from "../../entities/User.entity.js"; +import { initContext } from "../../test/index.js"; +import { mockedContext, mockTERightOnce } from "../../test/mocks/mock.utils.js"; +import { + createEventFromURL, + type CreateEventFromURLContext, +} from "./createEventFromURL.flow.js"; + +describe(createEventFromURL.name, () => { + const appTest = { + ctx: mockedContext({ + puppeteer: mockDeep(), + logger: mockDeep(), + db: mockDeep(), + ner: mockDeep(), + fs: mockDeep(), + urlMetadata: mockDeep(), + config: initContext().config, + }), + }; + + it("should create an event from a URL", async () => { + const [url] = fc + .sample(fc.nat(), 1) + .map((id) => `https://www.sciencedirect.com/article/${id}` as any); + + const title = fc.sample(HumanReadableStringArb(), 1)[0]; + const description = fc.sample(HumanReadableStringArb(), 1)[0]; + + // no url in db + mockTERightOnce(appTest.ctx.db.execQuery, () => null); + // event by url + mockTERightOnce(appTest.ctx.puppeteer.execute, () => + fp.O.some({ + type: SCIENTIFIC_STUDY.value, + date: new Date(), + payload: { + title, + url, + description, + }, + }), + ); + + // link by url + let savedEvent: any; + mockTERightOnce(appTest.ctx.db.save, (_, event) => { + savedEvent = event[0]; + return event; + }); + + mockTERightOnce(appTest.ctx.db.findOneOrFail, () => savedEvent); + + // mocks.urlMetadata.fetchMetadata.mockResolvedValue({ + // title, + // description, + // url: scientificStudyData.url, + // keywords: [], + // }); + + // mockTERightOnce(appTest.ctx.puppeteer.getBrowser, () => null); + // mocks.puppeteer.page.goto.mockResolvedValueOnce(undefined); + + // // evaluate title + // mocks.puppeteer.page.$eval.mockResolvedValueOnce(title); + // // evaluate dropdown click + // mocks.puppeteer.page.click.mockResolvedValueOnce(undefined); + // // evaluate date string + // mocks.puppeteer.page.$eval.mockResolvedValueOnce([ + // "Received 27 July 2020", + // "Accepted 1 August 2020", + // ]); + // // wait for + // mocks.puppeteer.page.waitForSelector.mockResolvedValueOnce(undefined); + // mocks.puppeteer.page.$$.mockResolvedValueOnce([ + // { + // evaluate: vi.fn().mockResolvedValue(description), + // }, + // ]); + + // mocks.puppeteer.page.$eval.mockResolvedValueOnce("page content"); + + // mocks.ner.winkMethods.learnCustomEntities.mockResolvedValueOnce({} as any); + // mocks.ner.doc.out.mockReturnValue([]); + // mocks.ner.doc.sentences.mockReturnValue({ each: vi.fn() } as any); + // mocks.ner.doc.customEntities.mockReturnValue({ + // out: vi.fn().mockReturnValue([]), + // } as any); + // mocks.ner.doc.tokens.mockReturnValue({ each: vi.fn() } as any); + + // mocks.fs.existsSync.mockReturnValue(false); + // mocks.fs.readFileSync.mockReturnValue("[]"); + + const user = new UserEntity(); + + const event: any = await pipe( + createEventFromURL( + user, + uuid(), + url, + SCIENTIFIC_STUDY.value, + )(appTest.ctx), + throwTE, + ); + + expect(appTest.ctx.db.save).toHaveBeenCalledWith(EventV2Entity, [ + expect.objectContaining({ + type: SCIENTIFIC_STUDY.value, + payload: { + title, + description, + url: sanitizeURL(url), + }, + }), + ]); + + expect(event.type).toBe(SCIENTIFIC_STUDY.value); + expect(event.date).toBe(savedEvent.date); + + expect(event.payload).toMatchObject(savedEvent.payload); + }); +}); diff --git a/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.ts b/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.ts new file mode 100644 index 0000000000..a2e1ee03d8 --- /dev/null +++ b/packages/@liexp/backend/src/flows/event/createEventFromURL.flow.ts @@ -0,0 +1,86 @@ +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; +import { type UUID, type URL } from "@liexp/shared/lib/io/http/Common/index.js"; +import { type EventType } from "@liexp/shared/lib/io/http/Events/EventType.js"; +import * as O from "fp-ts/lib/Option.js"; +import { type ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; +import * as TE from "fp-ts/lib/TaskEither.js"; +import { Equal } from "typeorm"; +import { type ConfigContext } from "../../context/config.context.js"; +import { type DatabaseContext } from "../../context/db.context.js"; +import { type FSClientContext } from "../../context/fs.context.js"; +import { type NERProviderContext } from "../../context/index.js"; +import { type LoggerContext } from "../../context/logger.context.js"; +import { type PuppeteerProviderContext } from "../../context/puppeteer.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; +import { EventV2Entity } from "../../entities/Event.v2.entity.js"; +import { type UserEntity } from "../../entities/User.entity.js"; +import { ServerError } from "../../errors/ServerError.js"; +import { findByURL } from "../../queries/events/scientificStudy.query.js"; +import { extractEventFromURL } from "./extractFromURL.flow.js"; + +export type CreateEventFromURLContext = LoggerContext & + ConfigContext & + FSClientContext & + NERProviderContext & + DatabaseContext & + URLMetadataContext & + PuppeteerProviderContext; + +export const createEventFromURL = ( + user: UserEntity, + eventId: UUID, + url: URL, + type: EventType, +): ReaderTaskEither => { + return pipe( + findByURL(url), + fp.RTE.chain((existingEvent) => { + if (O.isSome(existingEvent)) { + return fp.RTE.right(existingEvent.value); + } + + return pipe( + fp.RTE.ask(), + fp.RTE.chainTaskEitherK((ctx) => + pipe( + ctx.puppeteer.execute({}, (b) => { + return pipe( + TE.tryCatch( + () => b.pages().then((p) => p[0]), + ServerError.fromUnknown, + ), + TE.chain((p) => + extractEventFromURL(p, user, { + type, + url, + })(ctx), + ), + ); + }), + TE.chain((meta) => { + if (O.isSome(meta)) { + return ctx.db.save(EventV2Entity, [ + { ...meta.value, id: eventId }, + ]); + } + + return TE.left( + ServerError.fromUnknown( + new Error(`No event can be extracted from url #{url} `), + ), + ); + }), + TE.chain(([result]) => + ctx.db.findOneOrFail(EventV2Entity, { + where: { id: Equal(result.id) }, + loadRelationIds: { + relations: ["media", "links", "keywords"], + }, + }), + ), + ), + ), + ); + }), + ); +}; diff --git a/packages/@liexp/backend/src/flows/event/extractFromURL.flow.spec.ts b/packages/@liexp/backend/src/flows/event/extractFromURL.flow.spec.ts new file mode 100644 index 0000000000..f29744f692 --- /dev/null +++ b/packages/@liexp/backend/src/flows/event/extractFromURL.flow.spec.ts @@ -0,0 +1,135 @@ +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; +import { uuid } from "@liexp/shared/lib/io/http/Common/UUID.js"; +import { SCIENTIFIC_STUDY } from "@liexp/shared/lib/io/http/Events/EventType.js"; +import { HumanReadableStringArb } from "@liexp/shared/lib/tests/arbitrary/HumanReadableString.arbitrary.js"; +import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; +import { sanitizeURL } from "@liexp/shared/lib/utils/url.utils.js"; +import { fc } from "@liexp/test"; +import { describe, expect, it, vi } from "vitest"; +import { mock } from "vitest-mock-extended"; +import { LinkEntity } from "../../entities/Link.entity.js"; +import { UserEntity } from "../../entities/User.entity.js"; +import { initContext, testConfig } from "../../test/index.js"; +import { mockedContext, mockTERightOnce } from "../../test/mocks/mock.utils.js"; +import { mocks } from "../../test/mocks.js"; +import { + createEventFromURL, + type CreateEventFromURLContext, +} from "./createEventFromURL.flow.js"; +import { extractEventFromURL } from "./extractFromURL.flow.js"; + +describe.skip(extractEventFromURL.name, () => { + const appTest = { + ctx: mockedContext({ + puppeteer: mock(), + logger: mock(), + db: mock(), + ner: mock(), + fs: mock(), + urlMetadata: mock(), + config: testConfig, + }), + }; + + it("should create an event from a URL", async () => { + const [url] = fc + .sample(fc.nat(), 1) + .map((id) => `https://www.sciencedirect.com/article/${id}` as any); + + const title = fc.sample(HumanReadableStringArb(), 1)[0]; + const description = fc.sample(HumanReadableStringArb(), 1)[0]; + + const scientificStudyData = { url }; + + // event by url + mockTERightOnce(appTest.ctx.db.execQuery, () => null); + // link by url + mockTERightOnce(appTest.ctx.db.findOne, () => null); + // save link + let savedEvent: any; + appTest.ctx.db.save.mockImplementation((_, link) => { + const l: any = link; + if (l[0].type === SCIENTIFIC_STUDY.value) { + savedEvent = l[0]; + } + return fp.TE.right(link); + }); + + mockTERightOnce(appTest.ctx.db.findOneOrFail, () => savedEvent); + + mocks.redis.publish.mockResolvedValue(1); + mocks.urlMetadata.fetchMetadata.mockResolvedValue({ + title, + description, + url: scientificStudyData.url, + keywords: [], + }); + + mockTERightOnce(appTest.ctx.puppeteer.getBrowser, () => null); + mocks.puppeteer.page.goto.mockResolvedValueOnce(undefined); + + // evaluate title + mocks.puppeteer.page.$eval.mockResolvedValueOnce(title); + // evaluate dropdown click + mocks.puppeteer.page.click.mockResolvedValueOnce(undefined); + // evaluate date string + mocks.puppeteer.page.$eval.mockResolvedValueOnce([ + "Received 27 July 2020", + "Accepted 1 August 2020", + ]); + // wait for + mocks.puppeteer.page.waitForSelector.mockResolvedValueOnce(undefined); + mocks.puppeteer.page.$$.mockResolvedValueOnce([ + { + evaluate: vi.fn().mockResolvedValue(description), + }, + ]); + + mocks.puppeteer.page.$eval.mockResolvedValueOnce("page content"); + + mocks.ner.winkMethods.learnCustomEntities.mockResolvedValueOnce({} as any); + mocks.ner.doc.out.mockReturnValue([]); + mocks.ner.doc.sentences.mockReturnValue({ each: vi.fn() } as any); + mocks.ner.doc.customEntities.mockReturnValue({ + out: vi.fn().mockReturnValue([]), + } as any); + mocks.ner.doc.tokens.mockReturnValue({ each: vi.fn() } as any); + + mocks.fs.existsSync.mockReturnValue(false); + mocks.fs.readFileSync.mockReturnValue("[]"); + + const user = new UserEntity(); + + const event: any = await pipe( + createEventFromURL( + user, + uuid(), + scientificStudyData.url, + SCIENTIFIC_STUDY.value, + )(appTest.ctx), + throwTE, + ); + + expect(mocks.ner).toHaveBeenCalledTimes(1); + expect(mocks.ner.winkMethods.learnCustomEntities).toHaveBeenCalledTimes(1); + expect(mocks.ner.winkMethods.readDoc).toHaveBeenCalledTimes(1); + expect(mocks.ner.doc.out).toHaveBeenCalledTimes(1); + + expect(mocks.db.connection.manager.save).toHaveBeenCalledWith( + LinkEntity, + + [ + expect.objectContaining({ + url: sanitizeURL(scientificStudyData.url), + }), + ], + undefined, + ); + + expect(event.type).toBe(SCIENTIFIC_STUDY.value); + expect(event.date).toBeDefined(); + + expect(event.payload.url).toBeInstanceOf(String); + expect(event.payload.title).toEqual(title); + }); +}); diff --git a/packages/@liexp/backend/src/flows/event/extractFromURL.flow.ts b/packages/@liexp/backend/src/flows/event/extractFromURL.flow.ts index eceb13fd51..64e81da776 100644 --- a/packages/@liexp/backend/src/flows/event/extractFromURL.flow.ts +++ b/packages/@liexp/backend/src/flows/event/extractFromURL.flow.ts @@ -3,8 +3,10 @@ import { getRelationIdsFromEventRelations } from "@liexp/shared/lib/helpers/even import { getSuggestions } from "@liexp/shared/lib/helpers/event-suggestion.js"; import { uuid } from "@liexp/shared/lib/io/http/Common/UUID.js"; import { type URL as URLT } from "@liexp/shared/lib/io/http/Common/index.js"; -import { type EventType } from "@liexp/shared/lib/io/http/Events/EventType.js"; -import { type ImageType } from "@liexp/shared/lib/io/http/Media/index.js"; +import { + SCIENTIFIC_STUDY, + type EventType, +} from "@liexp/shared/lib/io/http/Events/EventType.js"; import { toInitialValue } from "@liexp/shared/lib/providers/blocknote/utils.js"; import { parse } from "date-fns"; import { sequenceS } from "fp-ts/lib/Apply.js"; @@ -16,19 +18,18 @@ import type * as puppeteer from "puppeteer-core"; import { type ConfigContext } from "../../context/config.context.js"; import { type DatabaseContext } from "../../context/db.context.js"; import { type FSClientContext } from "../../context/fs.context.js"; -import { - type URLMetadataContext, - type NERProviderContext, -} from "../../context/index.js"; +import { type NERProviderContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type EventV2Entity } from "../../entities/Event.v2.entity.js"; import { type LinkEntity } from "../../entities/Link.entity.js"; import { type UserEntity } from "../../entities/User.entity.js"; import { ServerError } from "../../errors/ServerError.js"; +import { LinkIO } from "../../io/link.io.js"; import { extractRelationsFromURL } from "../admin/nlp/extractRelationsFromURL.flow.js"; import { fetchAndSave } from "../links/link.flow.js"; -const extractEventFromProviderLink = +const extractPageMetadataFromProviderLink = ( p: puppeteer.Page, host: string, @@ -75,7 +76,7 @@ const extractEventFromProviderLink = ); return O.some({ - type: "ScientificStudy", + type: SCIENTIFIC_STUDY.value, title, date: date.toISOString(), description: contentText ?? "", @@ -113,7 +114,7 @@ const extractEventFromProviderLink = ); return O.some({ - type: "ScientificStudy", + type: SCIENTIFIC_STUDY.value, title, date: date.toISOString(), description: contentText ?? "", @@ -141,7 +142,7 @@ const extractEventFromProviderLink = ); return O.some({ - type: "ScientificStudy", + type: SCIENTIFIC_STUDY.value, title, date: date.toISOString(), description: contentText ?? "", @@ -170,14 +171,15 @@ const extractByProvider = p: puppeteer.Page, host: string, l: LinkEntity, + type: EventType, ): ReaderTaskEither> => (ctx) => { return pipe( TE.Do, TE.bind("relations", () => - sequenceS(TE.ApplicativePar)({ + sequenceS(TE.ApplicativeSeq)({ relations: extractRelationsFromURL(p, l.url)(ctx), - provider: extractEventFromProviderLink(p, host, l)(ctx), + provider: extractPageMetadataFromProviderLink(p, host, l)(ctx), }), ), TE.bind( @@ -190,58 +192,46 @@ const extractByProvider = }) => { if (fp.O.isSome(provider)) { return pipe( - TE.tryCatch(() => { - return getSuggestions((v) => - Promise.resolve(toInitialValue(v)), - )( - provider.value, - O.some({ - id: l.id, - title: l.title, - description: l.description ?? l.title, - publishDate: l.publishDate ?? undefined, - provider: l.provider as any, - creator: l.creator?.id, - url: l.url, - image: l.image - ? { - ...l.image, - label: l.image.label ?? undefined, - description: l.image.description ?? undefined, - thumbnail: l.image.thumbnail ?? undefined, - type: l.image as any as ImageType, - extra: l.image.extra ?? undefined, - events: [], - links: [], - keywords: [], - areas: [], - } - : undefined, - keywords: [], - events: [], - actors: [], - groups: [], - media: [], - socialPosts: [], - createdAt: new Date(), - updatedAt: new Date(), - deletedAt: undefined, - }), - O.none, - getRelationIdsFromEventRelations({ - groupsMembers: [], - media: [], - areas: [], - actors: entities.actors as any[], - groups: entities.groups as any[], - keywords: entities.keywords as any[], - links: entities.links as any[], - }), + TE.Do, + TE.bind("link", () => { + return pipe( + LinkIO.decodeSingle(l), + fp.E.fold(() => fp.O.none, fp.O.some), + fp.TE.right, ); - }, ServerError.fromUnknown), - TE.map((suggestions) => - suggestions.find((s) => s.event.type === "ScientificStudy"), + }), + TE.bind("relations", () => + pipe( + fp.TE.right( + getRelationIdsFromEventRelations({ + groupsMembers: [], + media: [], + areas: [], + actors: entities.actors as any[], + groups: entities.groups as any[], + keywords: entities.keywords as any[], + links: entities.links as any[], + }), + ), + ), ), + TE.chain(({ link, relations }) => + TE.tryCatch(() => { + const suggestionMaker = getSuggestions((v) => + Promise.resolve(toInitialValue(v)), + ); + + return suggestionMaker( + provider.value, + link, + O.none, + relations, + ); + }, ServerError.fromUnknown), + ), + TE.map((suggestions) => { + return suggestions.find((s) => s.event.type === type); + }), TE.map(O.fromNullable), ); } @@ -305,7 +295,10 @@ export const extractEventFromURL = ctx.logger.debug.log("Extracting event from host %s (%s)", host, l.url); return pipe( - fetchAndSave(user, l.url)(ctx), - TE.chain((le) => extractByProvider(p, host, le)(ctx)), - ); + fp.RTE.Do, + fp.RTE.bind("event", () => fetchAndSave(user, l.url)), + fp.RTE.chain(({ event }) => { + return pipe(extractByProvider(p, host, event, l.type)); + }), + )(ctx); }; diff --git a/packages/@liexp/backend/src/flows/event/scientific-study/createFromURL.flow.ts b/packages/@liexp/backend/src/flows/event/scientific-study/createFromURL.flow.ts deleted file mode 100644 index abfa3cf02a..0000000000 --- a/packages/@liexp/backend/src/flows/event/scientific-study/createFromURL.flow.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { fp, pipe } from "@liexp/core/lib/fp/index.js"; -import { type URL } from "@liexp/shared/lib/io/http/Common/index.js"; -import { SCIENTIFIC_STUDY } from "@liexp/shared/lib/io/http/Events/EventType.js"; -import * as O from "fp-ts/lib/Option.js"; -import { type ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; -import * as TE from "fp-ts/lib/TaskEither.js"; -import { Equal } from "typeorm"; -import { type ConfigContext } from "../../../context/config.context.js"; -import { type DatabaseContext } from "../../../context/db.context.js"; -import { type FSClientContext } from "../../../context/fs.context.js"; -import { - type NERProviderContext, - type URLMetadataContext, -} from "../../../context/index.js"; -import { type LoggerContext } from "../../../context/logger.context.js"; -import { type PuppeteerProviderContext } from "../../../context/puppeteer.context.js"; -import { EventV2Entity } from "../../../entities/Event.v2.entity.js"; -import { type UserEntity } from "../../../entities/User.entity.js"; -import { ServerError } from "../../../errors/ServerError.js"; -import { findByURL } from "../../../queries/events/scientificStudy.query.js"; -import { extractEventFromURL } from "../extractFromURL.flow.js"; - -export const createEventFromURL = < - C extends LoggerContext & - ConfigContext & - FSClientContext & - NERProviderContext & - DatabaseContext & - URLMetadataContext & - PuppeteerProviderContext, ->( - user: UserEntity, - url: URL, -): ReaderTaskEither => { - return pipe( - findByURL(url), - fp.RTE.chain((existingEvent) => { - if (O.isSome(existingEvent)) { - return fp.RTE.right(existingEvent.value); - } - - return pipe( - fp.RTE.ask(), - fp.RTE.chainTaskEitherK((ctx) => - pipe( - ctx.puppeteer.getBrowser({}), - TE.mapLeft(ServerError.fromUnknown), - TE.chain((b) => - pipe( - TE.tryCatch( - () => b.pages().then((p) => p[0]), - ServerError.fromUnknown, - ), - TE.chain((p) => - extractEventFromURL(p, user, { - type: SCIENTIFIC_STUDY.value, - url, - })(ctx), - ), - TE.chainFirst(() => { - return TE.tryCatch(() => b.close(), ServerError.fromUnknown); - }), - ), - ), - TE.chain((meta) => { - if (O.isSome(meta)) { - return ctx.db.save(EventV2Entity, [meta.value]); - } - return TE.left(ServerError.of()); - }), - TE.chain(([result]) => - ctx.db.findOneOrFail(EventV2Entity, { - where: { id: Equal(result.id) }, - loadRelationIds: { - relations: ["media", "links", "keywords"], - }, - }), - ), - ), - ), - ); - }), - ); -}; diff --git a/packages/@liexp/backend/src/flows/links/link.flow.ts b/packages/@liexp/backend/src/flows/links/link.flow.ts index 7c593bee19..dcd5f9f05d 100644 --- a/packages/@liexp/backend/src/flows/links/link.flow.ts +++ b/packages/@liexp/backend/src/flows/links/link.flow.ts @@ -11,8 +11,8 @@ import { DateFromISOString } from "io-ts-types/lib/DateFromISOString.js"; import { type Metadata } from "page-metadata-parser"; import { Equal } from "typeorm"; import { type DatabaseContext } from "../../context/db.context.js"; -import { type URLMetadataContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type LinkEntity } from "../../entities/Link.entity.js"; import { type UserEntity } from "../../entities/User.entity.js"; import { ServerError } from "../../errors/ServerError.js"; diff --git a/packages/@liexp/backend/src/flows/media/thumbnails/extractMP4Thumbnail.flow.ts b/packages/@liexp/backend/src/flows/media/thumbnails/extractMP4Thumbnail.flow.ts index 1c865d712e..6a651eb4d5 100644 --- a/packages/@liexp/backend/src/flows/media/thumbnails/extractMP4Thumbnail.flow.ts +++ b/packages/@liexp/backend/src/flows/media/thumbnails/extractMP4Thumbnail.flow.ts @@ -1,4 +1,4 @@ -import * as fs from "node:fs/promises"; +import * as fs from "fs/promises"; import path from "path"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { diff --git a/packages/@liexp/backend/src/flows/media/thumbnails/extractThumbnailFromPDF.flow.ts b/packages/@liexp/backend/src/flows/media/thumbnails/extractThumbnailFromPDF.flow.ts index 04cbbe8897..d63394842d 100644 --- a/packages/@liexp/backend/src/flows/media/thumbnails/extractThumbnailFromPDF.flow.ts +++ b/packages/@liexp/backend/src/flows/media/thumbnails/extractThumbnailFromPDF.flow.ts @@ -1,10 +1,9 @@ -// import { createRequire } from "module"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { ImageType, type PDFType, } from "@liexp/shared/lib/io/http/Media/index.js"; -import Canvas from "canvas"; +import { createCanvas } from "@napi-rs/canvas"; import * as TE from "fp-ts/lib/TaskEither.js"; import { type PDFPageProxy, @@ -28,7 +27,7 @@ export const extractThumbnailFromPDFPage = ( const outputScale = 1; - const canvas = Canvas.createCanvas(viewport.width, viewport.height); + const canvas = createCanvas(viewport.width, viewport.height); const context = canvas.getContext("2d"); canvas.height = viewport.height; @@ -65,7 +64,9 @@ export const extractThumbnailFromPDF = < fp.RTE.flatMapTaskEither(fetchPDF(media.location)), fp.RTE.chainTaskEitherK((pdf) => pipe( - [1, 2, 3], + pdf.numPages, + (p) => [1, p / 2, p].map(Math.floor), + fp.A.uniq(fp.N.Eq), fp.A.traverse(fp.TE.ApplicativePar)((page) => pipe( fp.TE.tryCatch(() => pdf.getPage(page), ServerError.fromUnknown), diff --git a/packages/@liexp/backend/src/flows/tg/MessageParser/index.ts b/packages/@liexp/backend/src/flows/tg/MessageParser/index.ts index a0faf267d9..1e009afc7f 100644 --- a/packages/@liexp/backend/src/flows/tg/MessageParser/index.ts +++ b/packages/@liexp/backend/src/flows/tg/MessageParser/index.ts @@ -19,7 +19,6 @@ import { type ENVContext } from "../../../context/env.context.js"; import { type FSClientContext } from "../../../context/fs.context.js"; import { type HTTPProviderContext } from "../../../context/http.context.js"; import { - type URLMetadataContext, type TGBotProviderContext, type FFMPEGProviderContext, type ImgProcClientContext, @@ -29,6 +28,7 @@ import { type PDFProviderContext } from "../../../context/pdf.context.js"; import { type PuppeteerProviderContext } from "../../../context/puppeteer.context.js"; import { type QueuesProviderContext } from "../../../context/queue.context.js"; import { type SpaceContext } from "../../../context/space.context.js"; +import { type URLMetadataContext } from "../../../context/urlMetadata.context.js"; import { type UserEntity } from "../../../entities/User.entity.js"; import { type TGError } from "../../../providers/tg/tg.provider.js"; import { LoggerService } from "../../../services/logger/logger.service.js"; diff --git a/packages/@liexp/backend/src/flows/tg/__tests__/createFromTGMessage.flow.spec.ts b/packages/@liexp/backend/src/flows/tg/__tests__/createFromTGMessage.flow.spec.ts index f741896de0..158766fb74 100644 --- a/packages/@liexp/backend/src/flows/tg/__tests__/createFromTGMessage.flow.spec.ts +++ b/packages/@liexp/backend/src/flows/tg/__tests__/createFromTGMessage.flow.spec.ts @@ -1,12 +1,8 @@ -import * as fs from "fs"; import path from "path"; -import { GetLogger } from "@liexp/core"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { getPlatformEmbedURL } from "@liexp/shared/lib/helpers/media.helper.js"; import { uuid } from "@liexp/shared/lib/io/http/Common/UUID.js"; import { AdminCreate } from "@liexp/shared/lib/io/http/User.js"; -import { HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; -import { PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; import { HumanReadableStringArb } from "@liexp/shared/lib/tests/arbitrary/HumanReadableString.arbitrary.js"; import { URLArb } from "@liexp/shared/lib/tests/arbitrary/URL.arbitrary.js"; import { UserArb } from "@liexp/shared/lib/tests/arbitrary/User.arbitrary.js"; @@ -15,15 +11,12 @@ import { sanitizeURL } from "@liexp/shared/lib/utils/url.utils.js"; import { fc } from "@liexp/test"; import debug from "debug"; import type TelegramBot from "node-telegram-bot-api"; -import { afterAll, beforeAll, describe, expect, test, vi } from "vitest"; -import { GetFSClient } from "../../../providers/fs/fs.provider.js"; -import { GetDatabaseClient } from "../../../providers/orm/database.provider.js"; -import { GetPuppeteerProvider } from "../../../providers/puppeteer.provider.js"; -import { EventsConfig } from "../../../queries/config/index.js"; +import { beforeAll, describe, expect, test, vi } from "vitest"; import { TGMessageArb, TGPhotoArb, } from "../../../test/arbitraries/TGMessage.arb.js"; +import { initContext } from "../../../test/index.js"; import puppeteerMocks from "../../../test/mocks/puppeteer.mock.js"; import { mocks } from "../../../test/mocks.js"; import { type UserTest } from "../../../test/user.utils.js"; @@ -43,25 +36,7 @@ interface MessageTest { describe("Create From TG Message", () => { let admin: UserTest; - const ctx = { - db: GetDatabaseClient({ - ...mocks.db, - logger: GetLogger("test"), - }), - tg: mocks.tg, - http: HTTPProvider(mocks.axios as any), - logger: GetLogger("test"), - imgProc: {} as any, - s3: mocks.s3 as any, - env: {} as any, - urlMetadata: mocks.urlMetadata, - queue: mocks.queueFS as any, - config: { events: EventsConfig } as any, - fs: GetFSClient(), - ffmpeg: {} as any, - pdf: PDFProvider({ client: mocks.pdf }), - puppeteer: GetPuppeteerProvider(mocks.puppeteer, {}, {} as any), - }; + const ctx = initContext(); beforeAll(() => { [admin] = fc.sample(UserArb, 1).map((u) => ({ @@ -69,17 +44,10 @@ describe("Create From TG Message", () => { password: "password", permissions: [AdminCreate.value], })); - if (!fs.existsSync(tempDir)) { - fs.mkdirSync(tempDir, { recursive: true }); - } // admin = await saveUser(ctx, [AdminCreate.value]); }); - afterAll(() => { - fs.rmSync(tempDir, { recursive: true }); - }); - describe.skip("createEventSuggestion", () => { test( "succeeds when link is not yet present in db", @@ -211,11 +179,10 @@ describe("Create From TG Message", () => { tempDir, `${message.message_id}.png`, ); - fs.writeFileSync(tempFileLocation, new Uint8Array(10)); // mock tg download mocks.tg.getFileStream.mockImplementationOnce(() => - fp.TE.right(fs.createReadStream(tempFileLocation)), + fp.TE.right(mocks.fs.createReadStream(tempFileLocation)), ); // mock puppeteer goto @@ -502,13 +469,11 @@ describe("Create From TG Message", () => { test.skip.each(messageCases)( "Running message case $n", async (c: MessageTest) => { - const message = pipe( - fs.readFileSync( - path.resolve(__dirname, `../../../../temp/tg/messages/${c.n}.json`), - "utf-8", - ), - JSON.parse, - ); + const message = { + message_id: c.n, + date: new Date().getTime(), + chat: {} as any, + }; puppeteerMocks.page.emulate.mockReset().mockResolvedValueOnce({}); const urls = c.urls(message); @@ -536,11 +501,9 @@ describe("Create From TG Message", () => { `${message.message_id}.png`, ); - fs.writeFileSync(tempFileLocation, new Uint8Array(10)); - // mock tg download mocks.tg.api.getFileStream.mockImplementationOnce(() => - fs.createReadStream(tempFileLocation), + mocks.fs.createReadStream(tempFileLocation), ); // mock s3 upload @@ -558,13 +521,13 @@ describe("Create From TG Message", () => { `${message.message_id}.png`, ); - fs.writeFileSync(tempFileLocation, new Uint8Array(10)); - // mock tg download mocks.tg.api.getFileStream - .mockImplementationOnce(() => fs.createReadStream(tempFileLocation)) .mockImplementationOnce(() => - fs.createReadStream(tempFileLocation), + mocks.fs.createReadStream(tempFileLocation), + ) + .mockImplementationOnce(() => + mocks.fs.createReadStream(tempFileLocation), ); // mock s3 upload diff --git a/packages/@liexp/backend/src/flows/tg/__tests__/upsertPinnedMessage.flow.spec.ts b/packages/@liexp/backend/src/flows/tg/__tests__/upsertPinnedMessage.flow.spec.ts index 44bfc7429c..d6f4bc8611 100644 --- a/packages/@liexp/backend/src/flows/tg/__tests__/upsertPinnedMessage.flow.spec.ts +++ b/packages/@liexp/backend/src/flows/tg/__tests__/upsertPinnedMessage.flow.spec.ts @@ -3,14 +3,21 @@ import { ActorArb, UncategorizedArb } from "@liexp/shared/lib/tests/index.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; import { fc } from "@liexp/test"; import * as E from "fp-ts/lib/Either.js"; -import { describe, test } from "vitest"; +import { describe, expect, test } from "vitest"; import { ActorEntity } from "../../../entities/Actor.entity.js"; +import { EventV2Entity } from "../../../entities/Event.v2.entity.js"; +import { KeywordEntity } from "../../../entities/Keyword.entity.js"; +import { initContext } from "../../../test/index.js"; +import { mocks } from "../../../test/mocks.js"; import { toPinnedMessage, upsertPinnedMessage, } from "../upsertPinnedMessage.flow.js"; describe("Upsert Pinned Message Flow", () => { + const Test = { + ctx: initContext(), + }; test.skip("Should upsert the message with 5 keywords", async () => { const keywordCount = 10; const actorCount = 10; @@ -43,7 +50,7 @@ describe("Upsert Pinned Message Flow", () => { ), ); - Test.mocks.tg.upsertPinnedMessage.mockImplementationOnce( + mocks.tg.upsertPinnedMessage.mockImplementationOnce( (text) => () => Promise.resolve(E.right({ message_id: 1, text })), ); diff --git a/packages/@liexp/backend/src/flows/tg/createFromTGMessage.flow.ts b/packages/@liexp/backend/src/flows/tg/createFromTGMessage.flow.ts index 678504a3f8..66a3f5a663 100644 --- a/packages/@liexp/backend/src/flows/tg/createFromTGMessage.flow.ts +++ b/packages/@liexp/backend/src/flows/tg/createFromTGMessage.flow.ts @@ -10,7 +10,6 @@ import { type ENVContext } from "../../context/env.context.js"; import { type FSClientContext } from "../../context/fs.context.js"; import { type HTTPProviderContext } from "../../context/http.context.js"; import { - type URLMetadataContext, type ImgProcClientContext, type TGBotProviderContext, type FFMPEGProviderContext, @@ -20,6 +19,7 @@ import { type PDFProviderContext } from "../../context/pdf.context.js"; import { type PuppeteerProviderContext } from "../../context/puppeteer.context.js"; import { type QueuesProviderContext } from "../../context/queue.context.js"; import { type SpaceContext } from "../../context/space.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type PuppeteerError, toPuppeteerError, diff --git a/packages/@liexp/backend/src/flows/tg/parseMessages.flow.ts b/packages/@liexp/backend/src/flows/tg/parseMessages.flow.ts index 4b7f080033..fbc312f318 100644 --- a/packages/@liexp/backend/src/flows/tg/parseMessages.flow.ts +++ b/packages/@liexp/backend/src/flows/tg/parseMessages.flow.ts @@ -7,7 +7,6 @@ import { type ENVContext } from "../../context/env.context.js"; import { type FSClientContext } from "../../context/fs.context.js"; import { type HTTPProviderContext } from "../../context/http.context.js"; import { - type URLMetadataContext, type ImgProcClientContext, type TGBotProviderContext, type FFMPEGProviderContext, @@ -17,6 +16,7 @@ import { type PDFProviderContext } from "../../context/pdf.context.js"; import { type PuppeteerProviderContext } from "../../context/puppeteer.context.js"; import { type QueuesProviderContext } from "../../context/queue.context.js"; import { type SpaceContext } from "../../context/space.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { toTGError, type TGError } from "../../providers/tg/tg.provider.js"; import { LoggerService } from "../../services/logger/logger.service.js"; import { diff --git a/packages/@liexp/backend/src/flows/tg/parseURL.flow.ts b/packages/@liexp/backend/src/flows/tg/parseURL.flow.ts index 604e04d8e2..d3221ace94 100644 --- a/packages/@liexp/backend/src/flows/tg/parseURL.flow.ts +++ b/packages/@liexp/backend/src/flows/tg/parseURL.flow.ts @@ -16,11 +16,11 @@ import type * as puppeteer from "puppeteer-core"; import { Equal } from "typeorm"; import { type DatabaseContext } from "../../context/db.context.js"; import { type ENVContext } from "../../context/env.context.js"; -import { type URLMetadataContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; import { type PuppeteerProviderContext } from "../../context/puppeteer.context.js"; import { type QueuesProviderContext } from "../../context/queue.context.js"; import { type SpaceContext } from "../../context/space.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { LinkEntity } from "../../entities/Link.entity.js"; import { type UserEntity } from "../../entities/User.entity.js"; import { ServerError } from "../../errors/index.js"; diff --git a/packages/@liexp/backend/src/providers/URLMetadata.provider.ts b/packages/@liexp/backend/src/providers/URLMetadata.provider.ts index 08c047ef66..668931fde0 100644 --- a/packages/@liexp/backend/src/providers/URLMetadata.provider.ts +++ b/packages/@liexp/backend/src/providers/URLMetadata.provider.ts @@ -27,7 +27,7 @@ export interface URLMetadataClient { ) => TE.TaskEither; } -interface MakeURLMetadataContext { +export interface MakeURLMetadataContext { client: AxiosInstance; parser: { getMetadata: (dom: Document, url: string, opts?: any) => Metadata; diff --git a/packages/@liexp/backend/src/providers/ffmpeg/ffmpeg.provider.spec.ts b/packages/@liexp/backend/src/providers/ffmpeg/ffmpeg.provider.spec.ts index 696d558ce0..246b1dbf13 100644 --- a/packages/@liexp/backend/src/providers/ffmpeg/ffmpeg.provider.spec.ts +++ b/packages/@liexp/backend/src/providers/ffmpeg/ffmpeg.provider.spec.ts @@ -1,7 +1,7 @@ import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; import type ffmpeg from "fluent-ffmpeg"; import { pipe } from "fp-ts/lib/function"; -import { describe, test, beforeEach } from "vitest"; +import { describe, test, beforeEach, expect } from "vitest"; import { mock } from "vitest-mock-extended"; import { GetFFMPEGProvider } from "./ffmpeg.provider"; diff --git a/packages/@liexp/backend/src/providers/fs/fs.provider.ts b/packages/@liexp/backend/src/providers/fs/fs.provider.ts index 47f466dd8f..180dca1a92 100644 --- a/packages/@liexp/backend/src/providers/fs/fs.provider.ts +++ b/packages/@liexp/backend/src/providers/fs/fs.provider.ts @@ -1,4 +1,4 @@ -import fs from "fs"; +import type * as fs from "fs"; import path from "path"; import { fp } from "@liexp/core/lib/fp/index.js"; import * as logger from "@liexp/core/lib/logger/index.js"; @@ -29,6 +29,10 @@ export const toFSError = (e: unknown): FSError => { }); }; +export interface GetFSClientContext { + client: typeof fs; +} + export interface FSClient { _fs: typeof fs; resolve: (filePath: string) => string; @@ -41,21 +45,21 @@ export interface FSClient { ) => TE.TaskEither; } -export const GetFSClient = (): FSClient => { +export const GetFSClient = (ctx: GetFSClientContext): FSClient => { const objectExists: FSClient["objectExists"] = (filePath) => { return TE.fromIOEither( fp.IOE.tryCatch(() => { const filePathDir = path.dirname(filePath); - const tempFolderExists = fs.existsSync(filePathDir); + const tempFolderExists = ctx.client.existsSync(filePathDir); if (!tempFolderExists) { fsLogger.debug.log( "Folder %s does not exist, creating...", filePathDir, ); - fs.mkdirSync(filePathDir, { recursive: true }); + ctx.client.mkdirSync(filePathDir, { recursive: true }); } - const statsExists = fs.existsSync(filePath); + const statsExists = ctx.client.existsSync(filePath); // fsLogger.debug.log( // "Network file path %s exists? %s", // path.relative(process.cwd(), filePath), @@ -69,7 +73,10 @@ export const GetFSClient = (): FSClient => { const getObject: FSClient["getObject"] = (filePath) => { fsLogger.debug.log("Getting object from path %s", filePath); return pipe( - fp.IOE.tryCatch(() => fs.readFileSync(filePath, "utf-8"), toFSError), + fp.IOE.tryCatch( + () => ctx.client.readFileSync(filePath, "utf-8"), + toFSError, + ), fp.TE.fromIOEither, ); }; @@ -79,14 +86,14 @@ export const GetFSClient = (): FSClient => { return pipe( TE.fromIOEither( fp.IOE.tryCatch(() => { - fs.writeFileSync(filePath, data, "utf-8"); + ctx.client.writeFileSync(filePath, data, "utf-8"); }, toFSError), ), ); }; return { - _fs: fs, + _fs: ctx.client, resolve: (p) => path.resolve(process.cwd(), p), objectExists, writeObject, @@ -98,7 +105,7 @@ export const GetFSClient = (): FSClient => { TE.chain((exists) => { if (exists) { return TE.fromIO(() => { - fs.rmSync(filePath); + ctx.client.rmSync(filePath); }); } else { if (throwIfNoExists) { diff --git a/packages/@liexp/backend/src/providers/ner/ner.provider.ts b/packages/@liexp/backend/src/providers/ner/ner.provider.ts index 78357a2f4d..4c131de907 100644 --- a/packages/@liexp/backend/src/providers/ner/ner.provider.ts +++ b/packages/@liexp/backend/src/providers/ner/ner.provider.ts @@ -67,13 +67,14 @@ interface NERProviderContext { export const GetNERProvider = ({ entitiesFile, - logger, + logger: _logger, nlp: winkNLP, }: NERProviderContext): NERProvider => { + const logger = _logger.extend("ner"); return { entitiesFile, process: (text, patterns) => { - logger.debug.log("Looking for %O", patterns); + logger.debug.log("Looking for patterns %O", patterns); return pipe( fp.IOE.tryCatch((): NERResults => { const nlp = winkNLP(model); diff --git a/packages/@liexp/backend/src/providers/puppeteer.provider.ts b/packages/@liexp/backend/src/providers/puppeteer.provider.ts index 2ffec4a837..3f3a73e81c 100644 --- a/packages/@liexp/backend/src/providers/puppeteer.provider.ts +++ b/packages/@liexp/backend/src/providers/puppeteer.provider.ts @@ -5,8 +5,7 @@ import * as E from "fp-ts/lib/Either.js"; import * as TE from "fp-ts/lib/TaskEither.js"; import { pipe } from "fp-ts/lib/function.js"; import type * as puppeteer from "puppeteer-core"; -import { addExtra, type VanillaPuppeteer } from "puppeteer-extra"; -import puppeteerStealth from "puppeteer-extra-plugin-stealth"; +import { type VanillaPuppeteer } from "puppeteer-extra"; import { IOError } from "ts-io-error"; const puppeteerLogger = logger.GetLogger("puppeteer"); @@ -134,8 +133,8 @@ export type GetPuppeteerProvider = ( browser: puppeteer.Browser, ) => PuppeteerProvider; -export const GetPuppeteerProvider =

( - pup: P, +export const GetPuppeteerProvider = ( + pup: VanillaPuppeteer, defaultOpts: BrowserLaunchOpts, devices: typeof puppeteer.KnownDevices, ): PuppeteerProvider => { @@ -151,9 +150,6 @@ export const GetPuppeteerProvider =

( TE.fromEither, TE.chain((executablePath) => { return TE.tryCatch(async () => { - const p = addExtra(pup); - p.use(puppeteerStealth()); - const options = { executablePath, headless: true, @@ -165,7 +161,7 @@ export const GetPuppeteerProvider =

( puppeteerLogger.info.log("Launching browser with %O", options); - const b = await p.launch(options); + const b = await pup.launch(options); return b as puppeteer.Browser; }, toPuppeteerError); }), diff --git a/packages/@liexp/backend/src/providers/redis/RedisPubSub.ts b/packages/@liexp/backend/src/providers/redis/RedisPubSub.ts new file mode 100644 index 0000000000..41527277ad --- /dev/null +++ b/packages/@liexp/backend/src/providers/redis/RedisPubSub.ts @@ -0,0 +1,44 @@ +import { fp } from "@liexp/core/lib/fp/index.js"; +import type { ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; +import * as TE from "fp-ts/lib/TaskEither.js"; +import { pipe } from "fp-ts/lib/function.js"; +import type { Decoder } from "io-ts"; +import type { LoggerContext } from "../../context/logger.context.js"; +import type { RedisContext } from "../../context/redis.context.js"; +import { type RedisError, toRedisError } from "./redis.error.js"; + +export interface RedisPubSub { + channel: K; + decoder: Decoder; + publish: ( + message: T, + ) => ReaderTaskEither; +} + +export const RedisPubSub = ( + channel: K, + decoder: Decoder, +): RedisPubSub => { + return { + channel, + decoder, + publish: + (message) => + ({ redis, logger }) => { + return pipe( + TE.tryCatch(async () => { + const count = await redis.publish(channel, JSON.stringify(message)); + logger.debug.log(`Published message to channel ${channel}`); + return count; + }, toRedisError), + fp.TE.filterOrElse( + (c) => c > 0, + () => + toRedisError( + new Error(`Failed to publish message on channel: ${channel}`), + ), + ), + ); + }, + }; +}; diff --git a/packages/@liexp/backend/src/providers/redis/Subscriber.ts b/packages/@liexp/backend/src/providers/redis/Subscriber.ts new file mode 100644 index 0000000000..b98a7a5b49 --- /dev/null +++ b/packages/@liexp/backend/src/providers/redis/Subscriber.ts @@ -0,0 +1,74 @@ +import { fp } from "@liexp/core/lib/fp/index.js"; +import type { ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; +import * as TE from "fp-ts/lib/TaskEither.js"; +import { pipe } from "fp-ts/lib/function.js"; +import { failure } from "io-ts/lib/PathReporter.js"; +import type { LoggerContext } from "../../context/logger.context.js"; +import type { RedisContext } from "../../context/redis.context.js"; +import type { RedisPubSub } from "./RedisPubSub.js"; +import { RedisError, toRedisError } from "./redis.error.js"; + +export interface Subscriber + extends RedisPubSub { + subscribe: () => ReaderTaskEither; +} + +export const Subscriber = < + C extends LoggerContext & RedisContext, + E, + T, + K extends string, +>( + pubSub: RedisPubSub, + subscribe: (payload: T) => ReaderTaskEither, +): Subscriber => ({ + ...pubSub, + subscribe: () => (ctx) => { + return pipe( + TE.tryCatch(async () => { + await ctx.redis.subscribe(pubSub.channel); + ctx.logger.debug.log(`Subscribed to channel ${pubSub.channel}`); + }, toRedisError), + fp.RTE.fromTaskEither, + fp.RTE.map(() => { + ctx.redis.on("message", (boundChannel, message) => { + if (boundChannel !== pubSub.channel) { + return; + } + + ctx.logger.debug.log(`Received message on channel ${pubSub.channel}`); + void pipe( + pubSub.decoder.decode(JSON.parse(message)), + fp.E.mapLeft( + (err) => + new RedisError("Failed to decode message", { + kind: "DecodingError", + errors: failure(err), + }) as E, + ), + fp.RTE.fromEither, + fp.RTE.chainTaskEitherK((message) => subscribe(message)(ctx)), + fp.RTE.fold( + (e) => { + ctx.logger.error.log( + `Handling message for channel %s failed: %O`, + pubSub.channel, + e, + ); + return () => fp.T.of(undefined); + }, + () => { + ctx.logger.debug.log( + `Message handled successfully for channel %s`, + pubSub.channel, + ); + return () => fp.T.of(undefined); + }, + ), + )(ctx)(); + }); + }), + )(ctx); + }, + // task, +}); diff --git a/packages/@liexp/backend/src/providers/redis/redis.error.ts b/packages/@liexp/backend/src/providers/redis/redis.error.ts new file mode 100644 index 0000000000..9def84b204 --- /dev/null +++ b/packages/@liexp/backend/src/providers/redis/redis.error.ts @@ -0,0 +1,25 @@ +import { IOError } from "ts-io-error"; + +export class RedisError extends IOError { + name = "RedisError"; +} + +export const toRedisError = (e: unknown): RedisError => { + if (e instanceof IOError) { + return e as RedisError; + } + + if (e instanceof Error) { + return new RedisError(e.message, { + kind: "ServerError", + status: "500", + meta: [e.name, e.stack], + }); + } + + return new RedisError("An error occurred", { + kind: "ServerError", + status: "500", + meta: [String(e)], + }); +}; diff --git a/packages/@liexp/backend/src/providers/redis/redis.provider.ts b/packages/@liexp/backend/src/providers/redis/redis.provider.ts index b74792f632..c5a8f7031b 100644 --- a/packages/@liexp/backend/src/providers/redis/redis.provider.ts +++ b/packages/@liexp/backend/src/providers/redis/redis.provider.ts @@ -1,133 +1,22 @@ -import { fp, pipe } from "@liexp/core/lib/fp/index.js"; -import { type ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; -import * as TE from "fp-ts/lib/TaskEither.js"; -import { type Decoder } from "io-ts"; -import { failure } from "io-ts/lib/PathReporter.js"; -import { IOError } from "ts-io-error"; -import { type LoggerContext } from "../../context/logger.context.js"; -import { type RedisContext } from "context/redis.context.js"; - -export class RedisError extends IOError { - name = "RedisError"; +import { fp } from "@liexp/core/lib/fp/index.js"; +import Redis from "ioredis"; +import { toRedisError } from "./redis.error.js"; + +interface RedisClientContext { + client: Redis; + host: string; + port: number; + lazyConnect?: boolean; } -const toRedisError = (e: unknown): RedisError => { - if (e instanceof IOError) { - return e as RedisError; - } - - if (e instanceof Error) { - return new RedisError(e.message, { - kind: "ServerError", - status: "500", - meta: [e.name, e.stack], +export const RedisClient = (ctx: RedisClientContext) => + fp.TE.tryCatch(async () => { + const redis = new Redis(6379, ctx.host, { + lazyConnect: ctx.lazyConnect, }); - } - - return new RedisError("An error occurred", { - kind: "ServerError", - status: "500", - meta: [String(e)], - }); -}; - -export interface RedisPubSub { - channel: K; - decoder: Decoder; - publish: ( - message: T, - ) => ReaderTaskEither; -} - -export const RedisPubSub = ( - channel: K, - decoder: Decoder, -): RedisPubSub => { - return { - channel, - decoder, - publish: - (message) => - ({ redis, logger }) => { - return pipe( - TE.tryCatch(async () => { - const count = await redis.publish(channel, JSON.stringify(message)); - logger.debug.log(`Published message to channel ${channel}`); - return count; - }, toRedisError), - fp.TE.filterOrElse( - (c) => c > 0, - () => - toRedisError( - new Error(`Failed to publish message on channel: ${channel}`), - ), - ), - ); - }, - }; -}; - -export interface Subscriber - extends RedisPubSub { - subscribe: () => ReaderTaskEither; -} - -export const Subscriber = < - C extends LoggerContext & RedisContext, - E, - T, - K extends string, ->( - pubSub: RedisPubSub, - subscribe: (payload: T) => ReaderTaskEither, -): Subscriber => ({ - ...pubSub, - subscribe: () => (ctx) => { - return pipe( - TE.tryCatch(async () => { - await ctx.redis.subscribe(pubSub.channel); - ctx.logger.debug.log(`Subscribed to channel ${pubSub.channel}`); - }, toRedisError), - fp.RTE.fromTaskEither, - fp.RTE.map(() => { - ctx.redis.on("message", (boundChannel, message) => { - if (boundChannel !== pubSub.channel) { - return; - } - ctx.logger.debug.log(`Received message on channel ${pubSub.channel}`); - void pipe( - pubSub.decoder.decode(JSON.parse(message)), - fp.E.mapLeft( - (err) => - new RedisError("Failed to decode message", { - kind: "DecodingError", - errors: failure(err), - }) as E, - ), - fp.RTE.fromEither, - fp.RTE.chainTaskEitherK((message) => subscribe(message)(ctx)), - fp.RTE.fold( - (e) => { - ctx.logger.error.log( - `Handling message for channel %s failed: %O`, - pubSub.channel, - e, - ); - return () => fp.T.of(undefined); - }, - () => { - ctx.logger.debug.log( - `Message handled successfully for channel %s`, - pubSub.channel, - ); - return () => fp.T.of(undefined); - }, - ), - )(ctx)(); - }); - }), - )(ctx); - }, - // task, -}); + if (ctx.lazyConnect) { + await redis.connect(); + } + return redis; + }, toRedisError); diff --git a/packages/@liexp/backend/src/providers/space/creates3.provider.ts b/packages/@liexp/backend/src/providers/space/creates3ProviderConfig.ts similarity index 68% rename from packages/@liexp/backend/src/providers/space/creates3.provider.ts rename to packages/@liexp/backend/src/providers/space/creates3ProviderConfig.ts index 62e4c33335..953c780047 100644 --- a/packages/@liexp/backend/src/providers/space/creates3.provider.ts +++ b/packages/@liexp/backend/src/providers/space/creates3ProviderConfig.ts @@ -1,7 +1,8 @@ -import { type S3ClientConfig } from "@aws-sdk/client-s3"; +import { S3Client, type S3ClientConfig } from "@aws-sdk/client-s3"; +import { Upload } from "@aws-sdk/lib-storage"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { type NODE_ENV } from "@liexp/core/lib/env/node-env.js"; -import { GetS3Provider } from "./s3.provider.js"; -import { type SpaceProvider } from "./space.provider.js"; +import { type MakeSpaceProviderConfig } from "./space.provider.js"; interface ENV { NODE_ENV: NODE_ENV; @@ -11,7 +12,9 @@ interface ENV { SPACE_ACCESS_KEY_SECRET: string; } -export const createS3Provider = (env: E): SpaceProvider => { +export const createS3ProviderConfig = ( + env: E, +): MakeSpaceProviderConfig => { const config: S3ClientConfig = env.NODE_ENV === "development" || env.NODE_ENV === "test" ? { @@ -34,5 +37,9 @@ export const createS3Provider = (env: E): SpaceProvider => { tls: true, }; - return GetS3Provider(config); + return { + client: new S3Client(config), + getSignedUrl, + classes: { Upload }, + }; }; diff --git a/packages/@liexp/backend/src/providers/tg/tg.provider.ts b/packages/@liexp/backend/src/providers/tg/tg.provider.ts index 285cd2b059..65b96f35bb 100644 --- a/packages/@liexp/backend/src/providers/tg/tg.provider.ts +++ b/packages/@liexp/backend/src/providers/tg/tg.provider.ts @@ -3,7 +3,8 @@ import { pipe, fp } from "@liexp/core/lib/fp/index.js"; import { type Logger } from "@liexp/core/lib/logger/index.js"; import { MP4Type, PDFType } from "@liexp/shared/lib/io/http/Media/MediaType.js"; import * as TE from "fp-ts/lib/TaskEither.js"; -import TelegramBot from "node-telegram-bot-api"; +import type TelegramBot from "node-telegram-bot-api"; +import { type ConstructorOptions } from "node-telegram-bot-api"; import { IOError } from "../../errors/index.js"; export interface TGBotProvider { @@ -76,11 +77,12 @@ const liftTGTE = (p: () => Promise): TE.TaskEither => { }; export interface TGBotProviderCtx { + client: (token: string, options: ConstructorOptions) => TelegramBot; logger: Logger; } export const TGBotProvider = ( - { logger }: TGBotProviderCtx, + { client, logger }: TGBotProviderCtx, opts: TGBotProviderOpts, ): TGBotProvider => { const encryptedToken = opts.token @@ -97,7 +99,7 @@ export const TGBotProvider = ( ...opts, token: encryptedToken, }); - const api = new TelegramBot(opts.token, { + const api = client(opts.token, { polling: opts.polling, baseApiUrl: opts.baseApiUrl, }); diff --git a/packages/@liexp/backend/src/pubsub/buildImageWithSharp.pubSub.ts b/packages/@liexp/backend/src/pubsub/buildImageWithSharp.pubSub.ts index 5d0f257c8d..d80d431e9e 100644 --- a/packages/@liexp/backend/src/pubsub/buildImageWithSharp.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/buildImageWithSharp.pubSub.ts @@ -1,8 +1,12 @@ +import { BuildImageLayer } from "@liexp/shared/lib/io/http/admin/BuildImage.js"; import * as t from "io-ts"; import { UUID } from "io-ts-types"; -import { RedisPubSub } from "../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../providers/redis/RedisPubSub.js"; export const BuildImageWithSharpPubSub = RedisPubSub( "image:build-with-sharp", - t.strict({ id: UUID }), + t.strict({ + image: t.union([UUID, t.null]), + layers: t.array(BuildImageLayer), + }), ); diff --git a/packages/@liexp/backend/src/pubsub/events/createEventFromURL.pubSub.ts b/packages/@liexp/backend/src/pubsub/events/createEventFromURL.pubSub.ts new file mode 100644 index 0000000000..dfe1dc8b65 --- /dev/null +++ b/packages/@liexp/backend/src/pubsub/events/createEventFromURL.pubSub.ts @@ -0,0 +1,15 @@ +import { URL } from "@liexp/shared/lib/io/http/Common/URL.js"; +import { UUID } from "@liexp/shared/lib/io/http/Common/UUID.js"; +import { EventType } from "@liexp/shared/lib/io/http/Events/EventType.js"; +import * as t from "io-ts"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; + +export const CreateEventFromURLPubSub = RedisPubSub( + "event:create-from-url", + t.strict({ + url: URL, + type: EventType, + eventId: UUID, + userId: UUID, + }), +); diff --git a/packages/@liexp/backend/src/pubsub/events/scientific-study/createFromURL.pubSub.ts b/packages/@liexp/backend/src/pubsub/events/scientific-study/createFromURL.pubSub.ts deleted file mode 100644 index 4a495a34f5..0000000000 --- a/packages/@liexp/backend/src/pubsub/events/scientific-study/createFromURL.pubSub.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { EventType } from "@liexp/shared/lib/io/http/Events/EventType.js"; -import * as t from "io-ts"; -import { RedisPubSub } from "../../../providers/redis/redis.provider.js"; - -export const CreateScientificStudyFromURLPubSub = RedisPubSub( - "scientific-study:create-from-url", - t.strict({ - url: t.string, - type: EventType, - }), -); diff --git a/packages/@liexp/backend/src/pubsub/jobs/processJobDone.pubSub.ts b/packages/@liexp/backend/src/pubsub/jobs/processJobDone.pubSub.ts index e4164a2d59..da3b488dc4 100644 --- a/packages/@liexp/backend/src/pubsub/jobs/processJobDone.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/jobs/processJobDone.pubSub.ts @@ -1,5 +1,5 @@ import * as t from "io-ts"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const ProcessJobDonePubSub = RedisPubSub( "job:process-done", diff --git a/packages/@liexp/backend/src/pubsub/media/createThumbnail.pubSub.ts b/packages/@liexp/backend/src/pubsub/media/createThumbnail.pubSub.ts index 5bf3456e83..36eb4af4df 100644 --- a/packages/@liexp/backend/src/pubsub/media/createThumbnail.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/media/createThumbnail.pubSub.ts @@ -1,6 +1,6 @@ import { Media } from "@liexp/shared/lib/io/http/Media/index.js"; import * as t from "io-ts"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; const { id, location, thumbnail, type } = Media.type.props; diff --git a/packages/@liexp/backend/src/pubsub/media/extractMediaExtra.pubSub.ts b/packages/@liexp/backend/src/pubsub/media/extractMediaExtra.pubSub.ts index a75222cbcb..efde290522 100644 --- a/packages/@liexp/backend/src/pubsub/media/extractMediaExtra.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/media/extractMediaExtra.pubSub.ts @@ -1,6 +1,6 @@ import * as t from "io-ts"; import { UUID } from "io-ts-types"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const ExtractMediaExtraPubSub = RedisPubSub( "media:extract-media-extra", diff --git a/packages/@liexp/backend/src/pubsub/media/generateThumbnail.pubSub.ts b/packages/@liexp/backend/src/pubsub/media/generateThumbnail.pubSub.ts index 12fd53a18f..ae80858ed2 100644 --- a/packages/@liexp/backend/src/pubsub/media/generateThumbnail.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/media/generateThumbnail.pubSub.ts @@ -1,6 +1,6 @@ import * as t from "io-ts"; import { UUID } from "io-ts-types"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const GenerateThumbnailPubSub = RedisPubSub( "media:generate-thumbnail", diff --git a/packages/@liexp/backend/src/pubsub/media/transferFromExternalProvider.pubSub.ts b/packages/@liexp/backend/src/pubsub/media/transferFromExternalProvider.pubSub.ts index 7d3a54424d..5d02be4dfe 100644 --- a/packages/@liexp/backend/src/pubsub/media/transferFromExternalProvider.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/media/transferFromExternalProvider.pubSub.ts @@ -1,7 +1,7 @@ import { MediaType } from "@liexp/shared/lib/io/http/Media/MediaType.js"; import * as t from "io-ts"; import { UUID } from "io-ts-types"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const TransferMediaFromExternalProviderPubSub = RedisPubSub( "media:transfer-from-external-provider", diff --git a/packages/@liexp/backend/src/pubsub/nlp/extractEntitiesWithNLP.pubSub.ts b/packages/@liexp/backend/src/pubsub/nlp/extractEntitiesWithNLP.pubSub.ts index 49ae1f6a79..d8f0cb8dab 100644 --- a/packages/@liexp/backend/src/pubsub/nlp/extractEntitiesWithNLP.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/nlp/extractEntitiesWithNLP.pubSub.ts @@ -1,5 +1,5 @@ import { ExtractEntitiesWithNLPInput } from "@liexp/shared/lib/io/http/admin/ExtractNLPEntities.js"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const ExtractEntitiesWithNLP = RedisPubSub( "nlp:extract-entities", diff --git a/packages/@liexp/backend/src/pubsub/postToSocialPlatforms.pubSub.ts b/packages/@liexp/backend/src/pubsub/postToSocialPlatforms.pubSub.ts index 1083f9bb25..f81a0a743d 100644 --- a/packages/@liexp/backend/src/pubsub/postToSocialPlatforms.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/postToSocialPlatforms.pubSub.ts @@ -1,7 +1,7 @@ import { CreateSocialPost } from "@liexp/shared/lib/io/http/SocialPost.js"; import * as t from "io-ts"; import { UUID } from "io-ts-types"; -import { RedisPubSub } from "../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../providers/redis/RedisPubSub.js"; export const PostToSocialPlatformsPubSub = RedisPubSub( "post-social-post", diff --git a/packages/@liexp/backend/src/pubsub/searchFromWikipedia.pubSub.ts b/packages/@liexp/backend/src/pubsub/searchFromWikipedia.pubSub.ts index fa0066fb10..f8626810b9 100644 --- a/packages/@liexp/backend/src/pubsub/searchFromWikipedia.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/searchFromWikipedia.pubSub.ts @@ -1,6 +1,6 @@ import { ACTOR, GROUP } from "@liexp/shared/lib/io/http/Common/index.js"; import * as t from "io-ts"; -import { RedisPubSub } from "../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../providers/redis/RedisPubSub.js"; export const SearchFromWikipediaPubSub = RedisPubSub( "search:search-from-wikipedia", diff --git a/packages/@liexp/backend/src/pubsub/stats/createEntityStats.pubSub.ts b/packages/@liexp/backend/src/pubsub/stats/createEntityStats.pubSub.ts index 321b8629b6..36ee88c393 100644 --- a/packages/@liexp/backend/src/pubsub/stats/createEntityStats.pubSub.ts +++ b/packages/@liexp/backend/src/pubsub/stats/createEntityStats.pubSub.ts @@ -1,5 +1,5 @@ import * as t from "io-ts"; -import { RedisPubSub } from "../../providers/redis/redis.provider.js"; +import { RedisPubSub } from "../../providers/redis/RedisPubSub.js"; export const CreateEntityStatsPubSub = RedisPubSub( "stats:create-entity", diff --git a/packages/@liexp/backend/src/queries/events/createEvent.query.ts b/packages/@liexp/backend/src/queries/events/createEvent.query.ts index bbf296fe67..03cd471158 100644 --- a/packages/@liexp/backend/src/queries/events/createEvent.query.ts +++ b/packages/@liexp/backend/src/queries/events/createEvent.query.ts @@ -5,8 +5,8 @@ import { type ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; import * as TE from "fp-ts/lib/TaskEither.js"; import { type DeepPartial } from "typeorm"; import { type DatabaseContext } from "../../context/db.context.js"; -import { type URLMetadataContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type EventV2Entity } from "../../entities/Event.v2.entity.js"; import { type DBError } from "../../providers/orm/database.provider.js"; import { fetchRelationIds } from "./fetchEventRelations.query.js"; @@ -14,7 +14,7 @@ import { fetchRelationIds } from "./fetchEventRelations.query.js"; export const createEventQuery = < C extends DatabaseContext & URLMetadataContext & LoggerContext, >( - input: http.Events.CreateEventBody, + input: http.Events.CreateEventPlainBody, ): ReaderTaskEither> => { return pipe( fetchRelationIds({ diff --git a/packages/@liexp/backend/src/queries/events/editEvent.query.ts b/packages/@liexp/backend/src/queries/events/editEvent.query.ts index 476115170b..132f0fa497 100644 --- a/packages/@liexp/backend/src/queries/events/editEvent.query.ts +++ b/packages/@liexp/backend/src/queries/events/editEvent.query.ts @@ -4,8 +4,8 @@ import * as O from "fp-ts/lib/Option.js"; import * as TE from "fp-ts/lib/TaskEither.js"; import { type DeepPartial } from "typeorm"; import { type DatabaseContext } from "../../context/db.context.js"; -import { type URLMetadataContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type EventV2Entity } from "../../entities/Event.v2.entity.js"; import { type DBError } from "../../providers/orm/database.provider.js"; import { optionalsToUndefined } from "../../utils/foldOptionals.utils.js"; diff --git a/packages/@liexp/backend/src/queries/events/fetchEventRelations.query.ts b/packages/@liexp/backend/src/queries/events/fetchEventRelations.query.ts index 2bfa92f3db..2f2be95d9d 100644 --- a/packages/@liexp/backend/src/queries/events/fetchEventRelations.query.ts +++ b/packages/@liexp/backend/src/queries/events/fetchEventRelations.query.ts @@ -12,8 +12,8 @@ import { type Int } from "io-ts"; import { type DeepPartial } from "typeorm"; import { type DatabaseContext } from "../../context/db.context.js"; import { type ENVContext } from "../../context/env.context.js"; -import { type URLMetadataContext } from "../../context/index.js"; import { type LoggerContext } from "../../context/logger.context.js"; +import { type URLMetadataContext } from "../../context/urlMetadata.context.js"; import { type ActorEntity } from "../../entities/Actor.entity.js"; import { type GroupEntity } from "../../entities/Group.entity.js"; import { type KeywordEntity } from "../../entities/Keyword.entity.js"; diff --git a/packages/@liexp/backend/src/test/index.ts b/packages/@liexp/backend/src/test/index.ts new file mode 100644 index 0000000000..74f055a372 --- /dev/null +++ b/packages/@liexp/backend/src/test/index.ts @@ -0,0 +1,121 @@ +import { GetLogger } from "@liexp/core/lib/index.js"; +import { HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; +import { PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; +import D from "debug"; +import * as puppeteer from "puppeteer-core"; +import { type ConfigContext } from "../context/config.context.js"; +import { type DatabaseContext } from "../context/db.context.js"; +import { type ENVContext } from "../context/env.context.js"; +import { type FSClientContext } from "../context/fs.context.js"; +import { type HTTPProviderContext } from "../context/http.context.js"; +import { + type FFMPEGProviderContext, + type ImgProcClientContext, + type NERProviderContext, + type TGBotProviderContext, +} from "../context/index.js"; +import { type LoggerContext } from "../context/logger.context.js"; +import { type PDFProviderContext } from "../context/pdf.context.js"; +import { type PuppeteerProviderContext } from "../context/puppeteer.context.js"; +import { type QueuesProviderContext } from "../context/queue.context.js"; +import { type SpaceContext } from "../context/space.context.js"; +import { type URLMetadataContext } from "../context/urlMetadata.context.js"; +import { type BACKEND_ENV } from "../io/ENV.js"; +import { MakeURLMetadata } from "../providers/URLMetadata.provider.js"; +import { GetFFMPEGProvider } from "../providers/ffmpeg/ffmpeg.provider.js"; +import { GetFSClient } from "../providers/fs/fs.provider.js"; +import { MakeImgProcClient } from "../providers/imgproc/imgproc.provider.js"; +import { GetNERProvider } from "../providers/ner/ner.provider.js"; +import { GetDatabaseClient } from "../providers/orm/index.js"; +import { GetPuppeteerProvider } from "../providers/puppeteer.provider.js"; +import { GetQueueProvider } from "../providers/queue.provider.js"; +import { MakeSpaceProvider } from "../providers/space/space.provider.js"; +import { TGBotProvider } from "../providers/tg/tg.provider.js"; +import { EventsConfig } from "../queries/config/index.js"; +import { mocks } from "./mocks.js"; + +const pdfContext = PDFProvider({ client: mocks.pdf }); + +type TestContext = ENVContext & + PDFProviderContext & + TGBotProviderContext & + LoggerContext & + DatabaseContext & + PuppeteerProviderContext & + ConfigContext & + FSClientContext & + NERProviderContext & + URLMetadataContext & + HTTPProviderContext & + ImgProcClientContext & + SpaceContext & + QueuesProviderContext & + FFMPEGProviderContext; + +export const testConfig = { + dirs: { + cwd: "", + config: { nlp: "" }, + temp: { root: "", queue: "", stats: "", nlp: "", media: "" }, + }, + media: { + thumbnailHeight: 0, + thumbnailWidth: 0, + }, + events: EventsConfig, +}; + +export const initContext = (): TestContext => { + D.enable(process.env.DEBUG ?? "*"); + + const logger = GetLogger("test"); + + const fs = GetFSClient({ client: mocks.fs }); + + const ctx = { + env: process.env as any as BACKEND_ENV, + db: GetDatabaseClient({ + connection: mocks.db.connection, + logger, + }), + fs, + s3: MakeSpaceProvider({ + client: mocks.s3.client as any, + getSignedUrl: mocks.s3.getSignedUrl, + classes: mocks.s3.classes as any, + }), + config: testConfig, + pdf: pdfContext, + puppeteer: GetPuppeteerProvider( + mocks.puppeteer, + {}, + puppeteer.KnownDevices, + ), + ffmpeg: GetFFMPEGProvider(mocks.ffmpeg), + queue: GetQueueProvider(fs, "fake-queue"), + http: HTTPProvider(mocks.axios as any), + ner: GetNERProvider({ + nlp: mocks.ner, + entitiesFile: "fake", + logger, + }), + urlMetadata: MakeURLMetadata({ + client: mocks.urlMetadata.fetchHTML as any, + parser: { + getMetadata: mocks.urlMetadata.fetchMetadata, + }, + }), + tg: TGBotProvider( + { logger: logger, client: () => mocks.tg as any }, + { token: "fake", chat: "fake", polling: false, baseApiUrl: "fake" }, + ), + imgProc: MakeImgProcClient({ + logger: logger.extend("imgproc"), + client: mocks.sharp, + exifR: mocks.exifR, + }), + logger: GetLogger("test"), + }; + + return ctx; +}; diff --git a/packages/@liexp/backend/src/test/mocks.ts b/packages/@liexp/backend/src/test/mocks.ts index 5e8e199a6c..1d2e1a07f6 100644 --- a/packages/@liexp/backend/src/test/mocks.ts +++ b/packages/@liexp/backend/src/test/mocks.ts @@ -1,7 +1,10 @@ +import { type AxiosInstance } from "axios"; import { type Mock, vi } from "vitest"; +import { mock, type MockProxy } from "vitest-mock-extended"; import { dbMock } from "./mocks/db.mock.js"; import { exifRMock } from "./mocks/exifreader.mock.js"; import ffmpegMock from "./mocks/ffmpeg.mock.js"; +import { fsMock } from "./mocks/fs.mock.js"; import { igProviderMock } from "./mocks/ig.mock.js"; import NLPMock from "./mocks/nlp.mock.js"; import { pdfJsMock } from "./mocks/pdfjs.mock.js"; @@ -13,8 +16,9 @@ import sharpMock from "./mocks/sharp.mock.js"; import { tgProviderMock } from "./mocks/tg.mock.js"; import { wikipediaProviderMock } from "./mocks/wikipedia.mock.js"; -export interface AppMocks { +export interface DepsMocks { axios: typeof axiosMock; + fs: typeof fsMock; ffmpeg: typeof ffmpegMock; ner: NLPMock; db: typeof dbMock; @@ -37,16 +41,30 @@ export interface AppMocks { const fetchHTML = vi.fn(); const fetchMetadata = vi.fn(); -export const axiosMock = { - get: vi.fn(), - interceptors: { - request: { - use: vi.fn(), - }, - }, -}; +export const axiosMock: MockProxy = mock( + { + get: vi.fn(), + interceptors: mock( + { + request: { + use: vi.fn(), + eject: vi.fn(), + clear: vi.fn(), + }, + response: { + use: vi.fn(), + eject: vi.fn(), + clear: vi.fn(), + }, + }, + { deep: true }, + ), + } as any, + { deep: true }, +); -export const mocks: AppMocks = { +export const mocks: DepsMocks = { + fs: fsMock, wiki: wikipediaProviderMock, axios: axiosMock, ffmpeg: ffmpegMock, diff --git a/packages/@liexp/backend/src/test/mocks/db.mock.ts b/packages/@liexp/backend/src/test/mocks/db.mock.ts index c423b4de60..8497a90291 100644 --- a/packages/@liexp/backend/src/test/mocks/db.mock.ts +++ b/packages/@liexp/backend/src/test/mocks/db.mock.ts @@ -10,6 +10,8 @@ import { mock, mockDeep } from "vitest-mock-extended"; const queryBuilder = mockDeep>({ where: vi.fn().mockReturnThis(), orWhere: vi.fn().mockReturnThis(), + loadAllRelationIds: vi.fn().mockReturnThis(), + getOne: vi.fn().mockRejectedValue(new Error("getOne not implemented")), getOneOrFail: vi .fn() .mockRejectedValue(new Error("getOneOrFail not implemented")), diff --git a/packages/@liexp/backend/src/test/mocks/fs.mock.ts b/packages/@liexp/backend/src/test/mocks/fs.mock.ts new file mode 100644 index 0000000000..3a958b27b4 --- /dev/null +++ b/packages/@liexp/backend/src/test/mocks/fs.mock.ts @@ -0,0 +1,9 @@ +import type fs from "fs"; +import { vi } from "vitest"; +import { type DeepMockProxy, mock } from "vitest-mock-extended"; + +export const fsMock: DeepMockProxy = mock({ + existsSync: vi.fn().mockImplementation(() => { + throw new Error("fs.existsSync is not implemented"); + }), +}); diff --git a/packages/@liexp/backend/src/test/mocks/mock.utils.ts b/packages/@liexp/backend/src/test/mocks/mock.utils.ts new file mode 100644 index 0000000000..d8ad6d8d3a --- /dev/null +++ b/packages/@liexp/backend/src/test/mocks/mock.utils.ts @@ -0,0 +1,20 @@ +import { fp } from "@liexp/core/lib/fp/index.js"; +import { type TaskEither } from "fp-ts/lib/TaskEither"; +import { type MockInstance } from "vitest"; +import { type DeepMockProxy } from "vitest-mock-extended"; + +export const mockTERightOnce = ( + fn: MockInstance<(...args: any[]) => TaskEither>, + value: (...args: any[]) => U, +) => + fn.mockImplementationOnce((...args) => { + return fp.TE.right(value(...args)); + }); + +type MockedContext> = { + [K in keyof C]: DeepMockProxy; +}; + +export const mockedContext = >( + ctx: C, +): MockedContext => ctx; diff --git a/packages/@liexp/backend/src/test/mocks/sharp.mock.ts b/packages/@liexp/backend/src/test/mocks/sharp.mock.ts index ded7432e57..cacf151a67 100644 --- a/packages/@liexp/backend/src/test/mocks/sharp.mock.ts +++ b/packages/@liexp/backend/src/test/mocks/sharp.mock.ts @@ -1,7 +1,8 @@ +import type sharp from "sharp"; import { vi } from "vitest"; -import { mock } from "vitest-mock-extended"; +import { type DeepMockProxy, mock } from "vitest-mock-extended"; -export const sharpMock = mock({ +export const sharpMock: DeepMockProxy = mock({ keepExif: vi.fn().mockReturnThis(), rotate: vi.fn().mockReturnThis(), resize: vi.fn().mockReturnThis(), @@ -9,4 +10,4 @@ export const sharpMock = mock({ toBuffer: vi.fn().mockResolvedValueOnce(Buffer.from([])), }); -export default vi.fn(() => sharpMock); +export default sharpMock as any as typeof sharp; diff --git a/packages/@liexp/backend/urls/0d1785bf42b588eaa482b4a024c964d3096dc6e0.txt b/packages/@liexp/backend/urls/0d1785bf42b588eaa482b4a024c964d3096dc6e0.txt new file mode 100644 index 0000000000..acdfa86028 --- /dev/null +++ b/packages/@liexp/backend/urls/0d1785bf42b588eaa482b4a024c964d3096dc6e0.txt @@ -0,0 +1 @@ +"page content" \ No newline at end of file diff --git a/packages/@liexp/backend/vitest.config.ts.timestamp-1737064274359-67b01676a0689.mjs b/packages/@liexp/backend/vitest.config.ts.timestamp-1737064274359-67b01676a0689.mjs new file mode 100644 index 0000000000..105a54e69c --- /dev/null +++ b/packages/@liexp/backend/vitest.config.ts.timestamp-1737064274359-67b01676a0689.mjs @@ -0,0 +1,57 @@ +// vitest.config.ts +import viteTsconfigPaths2 from "file:///home/ascariandrea/Workspace/lies-exposed/node_modules/vite-tsconfig-paths/dist/index.js"; +import { defineConfig as defineConfig2, mergeConfig } from "file:///home/ascariandrea/Workspace/lies-exposed/node_modules/vitest/dist/config.js"; + +// src/test/vitest.base-config.ts +import { URL } from "url"; +import viteTsconfigPaths from "file:///home/ascariandrea/Workspace/lies-exposed/node_modules/vite-tsconfig-paths/dist/index.js"; +import { defineConfig } from "file:///home/ascariandrea/Workspace/lies-exposed/node_modules/vitest/dist/config.js"; +var __vite_injected_original_import_meta_url = "file:///home/ascariandrea/Workspace/lies-exposed/packages/@liexp/backend/src/test/vitest.base-config.ts"; +var PathnameAlias = (url) => (mockPath) => { + return new URL(mockPath, url).pathname; +}; +var toAlias = PathnameAlias(__vite_injected_original_import_meta_url); +var baseConfig = defineConfig({ + root: toAlias("./"), + test: { + environment: "node", + watch: false, + alias: { + sharp: toAlias("mocks/sharp.mock.js"), + canvas: toAlias("mocks/canvas.mock.js"), + "pdfjs-dist/legacy/build/pdf.js": toAlias("mocks/pdfjs.mock.js"), + "@blocknote/core": toAlias("mocks/blocknote-core.mock.js"), + "@blocknote/react/**": toAlias("mocks/blocknote-react.mock.js") + } + }, + plugins: [ + viteTsconfigPaths({ + root: toAlias("./") + }) + ] +}); + +// vitest.config.ts +var __vite_injected_original_dirname = "/home/ascariandrea/Workspace/lies-exposed/packages/@liexp/backend"; +var vitest_config_default = mergeConfig(baseConfig, defineConfig2({ + test: { + name: "@liexp/backend", + root: __vite_injected_original_dirname, + globals: true, + include: [__vite_injected_original_dirname + "/src/**/*.spec.ts"], + watch: false, + coverage: { + thresholds: { + lines: 90, + statements: 80, + functions: 80 + } + } + }, + plugins: [viteTsconfigPaths2({ root: __vite_injected_original_dirname })], + root: __vite_injected_original_dirname +})); +export { + vitest_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZXN0LmNvbmZpZy50cyIsICJzcmMvdGVzdC92aXRlc3QuYmFzZS1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9hc2NhcmlhbmRyZWEvV29ya3NwYWNlL2xpZXMtZXhwb3NlZC9wYWNrYWdlcy9AbGlleHAvYmFja2VuZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL2hvbWUvYXNjYXJpYW5kcmVhL1dvcmtzcGFjZS9saWVzLWV4cG9zZWQvcGFja2FnZXMvQGxpZXhwL2JhY2tlbmQvdml0ZXN0LmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vaG9tZS9hc2NhcmlhbmRyZWEvV29ya3NwYWNlL2xpZXMtZXhwb3NlZC9wYWNrYWdlcy9AbGlleHAvYmFja2VuZC92aXRlc3QuY29uZmlnLnRzXCI7aW1wb3J0IHZpdGVUc2NvbmZpZ1BhdGhzIGZyb20gXCJ2aXRlLXRzY29uZmlnLXBhdGhzXCI7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcsIG1lcmdlQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIjtcbmltcG9ydCB7IGJhc2VDb25maWcgfSBmcm9tIFwiLi9zcmMvdGVzdC92aXRlc3QuYmFzZS1jb25maWdcIjtcblxuZXhwb3J0IGRlZmF1bHQgbWVyZ2VDb25maWcoYmFzZUNvbmZpZywgZGVmaW5lQ29uZmlnKHtcbiAgdGVzdDoge1xuICAgIG5hbWU6IFwiQGxpZXhwL2JhY2tlbmRcIixcbiAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgZ2xvYmFsczogdHJ1ZSxcbiAgICBpbmNsdWRlOiBbX19kaXJuYW1lICsgXCIvc3JjLyoqLyouc3BlYy50c1wiXSxcbiAgICB3YXRjaDogZmFsc2UsXG4gICAgY292ZXJhZ2U6IHtcbiAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgbGluZXM6IDkwLFxuICAgICAgICBzdGF0ZW1lbnRzOiA4MCxcbiAgICAgICAgZnVuY3Rpb25zOiA4MCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgcGx1Z2luczogW3ZpdGVUc2NvbmZpZ1BhdGhzKHsgcm9vdDogX19kaXJuYW1lIH0pXSxcbiAgcm9vdDogX19kaXJuYW1lLFxufSkpO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9hc2NhcmlhbmRyZWEvV29ya3NwYWNlL2xpZXMtZXhwb3NlZC9wYWNrYWdlcy9AbGlleHAvYmFja2VuZC9zcmMvdGVzdFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL2hvbWUvYXNjYXJpYW5kcmVhL1dvcmtzcGFjZS9saWVzLWV4cG9zZWQvcGFja2FnZXMvQGxpZXhwL2JhY2tlbmQvc3JjL3Rlc3Qvdml0ZXN0LmJhc2UtY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9ob21lL2FzY2FyaWFuZHJlYS9Xb3Jrc3BhY2UvbGllcy1leHBvc2VkL3BhY2thZ2VzL0BsaWV4cC9iYWNrZW5kL3NyYy90ZXN0L3ZpdGVzdC5iYXNlLWNvbmZpZy50c1wiO2ltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB2aXRlVHNjb25maWdQYXRocyBmcm9tIFwidml0ZS10c2NvbmZpZy1wYXRoc1wiO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIjtcblxuZXhwb3J0IGNvbnN0IFBhdGhuYW1lQWxpYXMgPVxuICAodXJsOiBzdHJpbmcpID0+XG4gIChtb2NrUGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gbmV3IFVSTChtb2NrUGF0aCwgdXJsKS5wYXRobmFtZTtcbiAgfTtcblxuY29uc3QgdG9BbGlhcyA9IFBhdGhuYW1lQWxpYXMoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IGJhc2VDb25maWcgPSBkZWZpbmVDb25maWcoe1xuICByb290OiB0b0FsaWFzKFwiLi9cIiksXG4gIHRlc3Q6IHtcbiAgICBlbnZpcm9ubWVudDogXCJub2RlXCIsXG4gICAgd2F0Y2g6IGZhbHNlLFxuICAgIGFsaWFzOiB7XG4gICAgICBzaGFycDogdG9BbGlhcyhcIm1vY2tzL3NoYXJwLm1vY2suanNcIiksXG4gICAgICBjYW52YXM6IHRvQWxpYXMoXCJtb2Nrcy9jYW52YXMubW9jay5qc1wiKSxcbiAgICAgIFwicGRmanMtZGlzdC9sZWdhY3kvYnVpbGQvcGRmLmpzXCI6IHRvQWxpYXMoXCJtb2Nrcy9wZGZqcy5tb2NrLmpzXCIpLFxuICAgICAgXCJAYmxvY2tub3RlL2NvcmVcIjogdG9BbGlhcyhcIm1vY2tzL2Jsb2Nrbm90ZS1jb3JlLm1vY2suanNcIiksXG4gICAgICBcIkBibG9ja25vdGUvcmVhY3QvKipcIjogdG9BbGlhcyhcIm1vY2tzL2Jsb2Nrbm90ZS1yZWFjdC5tb2NrLmpzXCIpLFxuICAgIH0sXG4gIH0sXG4gIHBsdWdpbnM6IFtcbiAgICB2aXRlVHNjb25maWdQYXRocyh7XG4gICAgICByb290OiB0b0FsaWFzKFwiLi9cIiksXG4gICAgfSksXG4gIF0sXG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBeVgsT0FBT0Esd0JBQXVCO0FBQ3ZaLFNBQVMsZ0JBQUFDLGVBQWMsbUJBQW1COzs7QUNEb1gsU0FBUyxXQUFXO0FBQ2xiLE9BQU8sdUJBQXVCO0FBQzlCLFNBQVMsb0JBQW9CO0FBRnNPLElBQU0sMkNBQTJDO0FBSTdTLElBQU0sZ0JBQ1gsQ0FBQyxRQUNELENBQUMsYUFBNkI7QUFDNUIsU0FBTyxJQUFJLElBQUksVUFBVSxHQUFHLEVBQUU7QUFDaEM7QUFFRixJQUFNLFVBQVUsY0FBYyx3Q0FBZTtBQUV0QyxJQUFNLGFBQWEsYUFBYTtBQUFBLEVBQ3JDLE1BQU0sUUFBUSxJQUFJO0FBQUEsRUFDbEIsTUFBTTtBQUFBLElBQ0osYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLE1BQ0wsT0FBTyxRQUFRLHFCQUFxQjtBQUFBLE1BQ3BDLFFBQVEsUUFBUSxzQkFBc0I7QUFBQSxNQUN0QyxrQ0FBa0MsUUFBUSxxQkFBcUI7QUFBQSxNQUMvRCxtQkFBbUIsUUFBUSw4QkFBOEI7QUFBQSxNQUN6RCx1QkFBdUIsUUFBUSwrQkFBK0I7QUFBQSxJQUNoRTtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLGtCQUFrQjtBQUFBLE1BQ2hCLE1BQU0sUUFBUSxJQUFJO0FBQUEsSUFDcEIsQ0FBQztBQUFBLEVBQ0g7QUFDRixDQUFDOzs7QUQ5QkQsSUFBTSxtQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxZQUFZLFlBQVlDLGNBQWE7QUFBQSxFQUNsRCxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxTQUFTLENBQUMsbUNBQVksbUJBQW1CO0FBQUEsSUFDekMsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLE1BQ1IsWUFBWTtBQUFBLFFBQ1YsT0FBTztBQUFBLFFBQ1AsWUFBWTtBQUFBLFFBQ1osV0FBVztBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBUyxDQUFDQyxtQkFBa0IsRUFBRSxNQUFNLGlDQUFVLENBQUMsQ0FBQztBQUFBLEVBQ2hELE1BQU07QUFDUixDQUFDLENBQUM7IiwKICAibmFtZXMiOiBbInZpdGVUc2NvbmZpZ1BhdGhzIiwgImRlZmluZUNvbmZpZyIsICJkZWZpbmVDb25maWciLCAidml0ZVRzY29uZmlnUGF0aHMiXQp9Cg== diff --git a/packages/@liexp/core/package.json b/packages/@liexp/core/package.json index 8e019d05c5..58cccf8fec 100644 --- a/packages/@liexp/core/package.json +++ b/packages/@liexp/core/package.json @@ -32,7 +32,7 @@ "devDependencies": { "@eslint/js": "^9.18.0", "@rollup/plugin-image": "^3.0.3", - "@tanstack/eslint-plugin-query": "^5.62.9", + "@tanstack/eslint-plugin-query": "^5.62.16", "@types/debug": "^4.1.12", "@types/eslint__js": "^8.42.3", "@vitejs/plugin-react": "^4.3.4", @@ -40,7 +40,7 @@ "eslint-import-resolver-typescript": "^3.7.0", "eslint-plugin-fp-ts": "^0.3.2", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.2.2", "eslint-plugin-react": "^7.37.4", "prettier": "^3.4.2", "typescript": "^5.6.2" @@ -54,5 +54,5 @@ "vite-plugin-optimizer": "^1", "vite-tsconfig-paths": "^5" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/packages/@liexp/shared/package.json b/packages/@liexp/shared/package.json index 6f5bc04ee6..21ed3f7fe4 100644 --- a/packages/@liexp/shared/package.json +++ b/packages/@liexp/shared/package.json @@ -26,8 +26,8 @@ "src/**/*.(ts|tsx|js|jsx)": "eslint --fix" }, "dependencies": { - "@blocknote/core": "^0.22.0", - "@blocknote/server-util": "^0.22.0", + "@blocknote/core": "^0.23.0", + "@blocknote/server-util": "^0.23.0", "@liexp/core": "workspace:*", "axios": "^1.7.9", "date-fns": "^4.1.0", @@ -53,7 +53,7 @@ "react-admin": "^5.4.4", "typescript": "^5.6.2", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^2.1.8", + "vitest": "^3.0.3", "vitest-mock-extended": "^2.0.2" }, "peerDependencies": { @@ -67,5 +67,5 @@ "react-dom": "^18", "sharp": "*" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/packages/@liexp/shared/src/endpoints/OpenGraph.endpoints.ts b/packages/@liexp/shared/src/endpoints/OpenGraph.endpoints.ts index 1e9e15d324..45b3c7c5e1 100644 --- a/packages/@liexp/shared/src/endpoints/OpenGraph.endpoints.ts +++ b/packages/@liexp/shared/src/endpoints/OpenGraph.endpoints.ts @@ -11,22 +11,28 @@ import { ResourceEndpoints } from "./types.js"; const SingleMediaOutput = Output(Media.Media, "Media"); const ListMediaOutput = ListOutput(Media.Media, "MediaList"); +const GetMetadataQuery = t.type( + { + url: URL, + type: t.union([t.literal("ScientificStudy"), t.literal("Link")]), + }, + "GetMetadataQuery", +); + export const GetMetadata = Endpoint({ Method: "GET", getPath: () => "/open-graph/metadata", Input: { - Query: t.type({ - url: URL, - type: t.union([t.literal("ScientificStudy"), t.literal("Link")]), - }), + Query: GetMetadataQuery, }, - Output: t.strict({ - data: t.strict({ + Output: Output( + t.strict({ metadata: t.any, link: t.union([Link, t.undefined]), relations: ExtractEntitiesWithNLPOutput, }), - }), + "GetMetadataOutput", + ), }); export const List = Endpoint({ diff --git a/packages/@liexp/shared/src/endpoints/admin.endpoints.ts b/packages/@liexp/shared/src/endpoints/admin.endpoints.ts index 79784dadff..e345028fc5 100644 --- a/packages/@liexp/shared/src/endpoints/admin.endpoints.ts +++ b/packages/@liexp/shared/src/endpoints/admin.endpoints.ts @@ -85,7 +85,7 @@ export const BuildImage = Endpoint({ ), }), }, - Output: t.any, + Output: Output(t.strict({ success: t.boolean }), "BuildImageOutput"), }); export const SearchAreaCoordinates = Endpoint({ diff --git a/packages/@liexp/shared/src/endpoints/events/scientificStudy.endpoint.ts b/packages/@liexp/shared/src/endpoints/events/scientificStudy.endpoint.ts index f665a2c0d7..45b38a08ba 100644 --- a/packages/@liexp/shared/src/endpoints/events/scientificStudy.endpoint.ts +++ b/packages/@liexp/shared/src/endpoints/events/scientificStudy.endpoint.ts @@ -75,7 +75,7 @@ export const Edit = Endpoint({ Input: { Params: t.type({ id: UUID }), Body: t.strict( - propsOmit(CreateScientificStudyBody.types[0], ["type"]), + propsOmit(CreateScientificStudyBody, ["type"]), "CreateScientificStudyBody", ), }, diff --git a/packages/@liexp/shared/src/io/http/Events/ScientificStudy.ts b/packages/@liexp/shared/src/io/http/Events/ScientificStudy.ts index 32a27548d5..6052152efe 100644 --- a/packages/@liexp/shared/src/io/http/Events/ScientificStudy.ts +++ b/packages/@liexp/shared/src/io/http/Events/ScientificStudy.ts @@ -1,6 +1,5 @@ import * as t from "io-ts"; import { UUID } from "io-ts-types/lib/UUID.js"; -import { URL } from "../Common/URL.js"; import { CreateEventCommon, EditEventCommon, @@ -21,20 +20,12 @@ export const ScientificStudyPayload = t.strict( export type ScientificStudyPayload = t.TypeOf; -export const CreateScientificStudyPlainBody = t.strict( +export const CreateScientificStudyBody = t.strict( { ...CreateEventCommon.type.props, type: SCIENTIFIC_STUDY, payload: ScientificStudyPayload, }, - "CreateScientificStudyPlainBody", -); -export type CreateScientificStudyPlainBody = t.TypeOf< - typeof CreateScientificStudyPlainBody ->; - -export const CreateScientificStudyBody = t.union( - [CreateScientificStudyPlainBody, t.strict({ url: URL })], "CreateScientificStudyBody", ); diff --git a/packages/@liexp/shared/src/io/http/Events/index.ts b/packages/@liexp/shared/src/io/http/Events/index.ts index 77c924daad..4c404ee61e 100644 --- a/packages/@liexp/shared/src/io/http/Events/index.ts +++ b/packages/@liexp/shared/src/io/http/Events/index.ts @@ -1,7 +1,7 @@ import * as t from "io-ts"; import { type Actor } from "../Actor.js"; import { type Area } from "../Area.js"; -import { type UUID } from "../Common/index.js"; +import { URL, type UUID } from "../Common/index.js"; import { type Group } from "../Group.js"; import { type GroupMember } from "../GroupMember.js"; import { type Keyword } from "../Keyword.js"; @@ -43,17 +43,33 @@ export const EventMap: { [key in Event["type"]]: t.Mixed } = { Quote: Quote.Quote, }; -export const CreateEventBody = t.union( +export const EventFromURLBody = t.strict( + { + url: URL, + type: EventType, + }, + "EventFromURLBody", +); + +export type EventFromURLBody = t.TypeOf; + +export const CreateEventPlainBody = t.union( [ Book.CreateBookBody, Death.CreateDeathBody, Patent.CreatePatentBody, - ScientificStudy.CreateScientificStudyBody.types[0], + ScientificStudy.CreateScientificStudyBody, Uncategorized.CreateEventBody, Documentary.CreateDocumentaryBody, Transaction.CreateTransactionBody, Quote.CreateQuoteBody, ], + "CreateEventPlainBody", +); +export type CreateEventPlainBody = t.TypeOf; + +export const CreateEventBody = t.union( + [CreateEventPlainBody, EventFromURLBody], "CreateEventBody", ); diff --git a/packages/@liexp/shared/src/providers/pdf/pdf.provider.ts b/packages/@liexp/shared/src/providers/pdf/pdf.provider.ts index 679af772ec..ad4d535d59 100644 --- a/packages/@liexp/shared/src/providers/pdf/pdf.provider.ts +++ b/packages/@liexp/shared/src/providers/pdf/pdf.provider.ts @@ -34,6 +34,9 @@ const toError = (e: any): IOError => { interface PDFProviderContext { client: typeof pdf; + cMapUrl?: string; + cMapPacked?: boolean; + standardFontDataUrl?: string; } export interface PDFProvider { @@ -47,7 +50,12 @@ export const PDFProvider = (ctx: PDFProviderContext): PDFProvider => { return { getDocument: (data) => TE.tryCatch(() => { - return ctx.client.getDocument({ data, useSystemFonts: true }).promise; + return ctx.client.getDocument({ + data, + cMapUrl: ctx.cMapUrl, + cMapPacked: ctx.cMapPacked, + standardFontDataUrl: ctx.standardFontDataUrl, + }).promise; }, toError), getAllTextContents(pdf) { return TE.tryCatch(async () => { diff --git a/packages/@liexp/shared/src/tests/arbitrary/Date.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/Date.arbitrary.ts index 2b715b6148..5c623e9479 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/Date.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/Date.arbitrary.ts @@ -1,4 +1,4 @@ -import { fc } from "@liexp/test"; +import { fc } from "@liexp/test/lib/index.js"; import { addYears, subYears } from "date-fns"; export const MIN_DATE = subYears(new Date(), 200); diff --git a/packages/@liexp/shared/src/tests/arbitrary/Event.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/Event.arbitrary.ts index c6c2103072..b41301d822 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/Event.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/Event.arbitrary.ts @@ -13,7 +13,7 @@ interface CreateEventBodyArbOpts { keywordIds?: boolean; } -const createEventProps = propsOmit(http.Events.CreateEventBody.types[4], [ +const createEventProps = propsOmit(http.Events.CreateEventPlainBody.types[4], [ "excerpt", "body", "date", @@ -27,7 +27,7 @@ export const CreateEventBodyArb = ({ linksIds = false, mediaIds = false, keywordIds = false, -}: CreateEventBodyArbOpts = {}): fc.Arbitrary => +}: CreateEventBodyArbOpts = {}): fc.Arbitrary => getArbitrary(t.strict(createEventProps)).map((b) => ({ ...b, excerpt: undefined, diff --git a/packages/@liexp/shared/src/tests/arbitrary/HumanReadableString.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/HumanReadableString.arbitrary.ts index 008923d6d6..dd04eaf6d4 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/HumanReadableString.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/HumanReadableString.arbitrary.ts @@ -1,4 +1,4 @@ -import { fc } from "@liexp/test"; +import { fc } from "@liexp/test/lib/index.js"; function capFirst(word: string): string { return word.charAt(0).toUpperCase() + word.slice(1); diff --git a/packages/@liexp/shared/src/tests/arbitrary/URL.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/URL.arbitrary.ts index e6042d21ae..df0cfe04fe 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/URL.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/URL.arbitrary.ts @@ -1,4 +1,4 @@ -import { fc } from "@liexp/test"; +import { fc } from "@liexp/test/lib/index.js"; import { HumanReadableStringArb } from "./HumanReadableString.arbitrary.js"; export const URLArb = fc diff --git a/packages/@liexp/shared/src/tests/arbitrary/common/UUID.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/common/UUID.arbitrary.ts index a58851fa27..ea610da035 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/common/UUID.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/common/UUID.arbitrary.ts @@ -1,4 +1,4 @@ -import { fc } from "@liexp/test"; +import { fc } from "@liexp/test/lib/index.js"; import { type UUID } from "../../../io/http/Common/UUID.js"; export const UUIDArb: fc.Arbitrary = fc.uuidV(4) as fc.Arbitrary; diff --git a/packages/@liexp/shared/src/tests/arbitrary/events/ScientificStudy.arbitrary.ts b/packages/@liexp/shared/src/tests/arbitrary/events/ScientificStudy.arbitrary.ts index eeea1edc0b..1411e38a43 100644 --- a/packages/@liexp/shared/src/tests/arbitrary/events/ScientificStudy.arbitrary.ts +++ b/packages/@liexp/shared/src/tests/arbitrary/events/ScientificStudy.arbitrary.ts @@ -1,5 +1,5 @@ import { propsOmit } from "@liexp/core/lib/io/utils.js"; -import * as tests from "@liexp/test"; +import * as tests from "@liexp/test/lib/index.js"; import * as t from "io-ts"; import * as http from "../../../io/http/index.js"; import { MIN_DATE, MAX_DATE, DateArb } from "../Date.arbitrary.js"; @@ -7,7 +7,7 @@ import { URLArb } from "../URL.arbitrary.js"; import { UUIDArb } from "../common/UUID.arbitrary.js"; const createScientificStudyProps = propsOmit( - http.Events.ScientificStudy.CreateScientificStudyBody.types[0], + http.Events.ScientificStudy.CreateScientificStudyBody, ["excerpt", "body", "date", "draft", "payload", "media", "links", "keywords"], ); diff --git a/packages/@liexp/test/package.json b/packages/@liexp/test/package.json index a14e7dc22b..877b3b00de 100644 --- a/packages/@liexp/test/package.json +++ b/packages/@liexp/test/package.json @@ -34,5 +34,5 @@ "debug": "*", "fast-check": "^2" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/packages/@liexp/ui/package.json b/packages/@liexp/ui/package.json index b72dc97854..1e6402183c 100644 --- a/packages/@liexp/ui/package.json +++ b/packages/@liexp/ui/package.json @@ -27,9 +27,9 @@ "src/**/*.(ts|tsx|js|jsx)": "eslint --fix" }, "dependencies": { - "@blocknote/core": "^0.22.0", - "@blocknote/mantine": "^0.22.0", - "@blocknote/react": "^0.22.0", + "@blocknote/core": "^0.23.0", + "@blocknote/mantine": "^0.23.0", + "@blocknote/react": "^0.23.0", "@emotion/cache": "^11.14.0", "@emotion/css": "^11.13.5", "@emotion/react": "^11.14.0", @@ -46,9 +46,9 @@ "@mui/lab": "^5.0.0-alpha.175", "@mui/material": "^5.16.14", "@mui/system": "^5.16.14", - "@mui/x-data-grid": "^7.23.6", + "@mui/x-data-grid": "^7.24.0", "@react-spring/web": "^9.7.4", - "@tanstack/react-query": "^5.63.0", + "@tanstack/react-query": "^5.64.1", "@visx/axis": "^3.12.0", "@visx/curve": "^3.12.0", "@visx/event": "^3.12.0", @@ -126,9 +126,9 @@ "eslint": "^9.18.0", "openai": "^4.78.1", "typescript": "^5.6.2", - "vite": "^6.0.9", + "vite": "^6.0.11", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^2.1.8" + "vitest": "^3.0.3" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/packages/@liexp/ui/src/components/Common/Icons/FAIcon.tsx b/packages/@liexp/ui/src/components/Common/Icons/FAIcon.tsx index 8bcfe787e8..2ed0ec86f5 100644 --- a/packages/@liexp/ui/src/components/Common/Icons/FAIcon.tsx +++ b/packages/@liexp/ui/src/components/Common/Icons/FAIcon.tsx @@ -47,20 +47,10 @@ export const FAIcon: React.FC = ({ type FAIconFC = React.FC>; export const HashtagIcon: FAIconFC = (props) => ( - + ); export const ActorIcon: FAIconFC = (props) => ( - + ); export const GroupIcon: FAIconFC = (props) => ( ( /> ); export const LinkIcon: FAIconFC = (props) => ( - + ); export const MediaIcon: FAIconFC = (props) => ( diff --git a/packages/@liexp/ui/src/components/admin/events/CreateEventFromLinkButton.tsx b/packages/@liexp/ui/src/components/admin/events/CreateEventFromLinkButton.tsx index 75e326a922..48961e9809 100644 --- a/packages/@liexp/ui/src/components/admin/events/CreateEventFromLinkButton.tsx +++ b/packages/@liexp/ui/src/components/admin/events/CreateEventFromLinkButton.tsx @@ -1,18 +1,13 @@ import { flow, fp } from "@liexp/core/lib/fp/index.js"; -import { getRelationIdsFromEventRelations } from "@liexp/shared/lib/helpers/event/getEventRelationIds.js"; -import { getSuggestions } from "@liexp/shared/lib/helpers/event-suggestion.js"; import { type Link } from "@liexp/shared/lib/io/http/Link.js"; -import { type Media } from "@liexp/shared/lib/io/http/Media/Media.js"; import { type EventSuggestion } from "@liexp/shared/lib/io/http/index.js"; import * as io from "@liexp/shared/lib/io/index.js"; import { type Either } from "fp-ts/lib/Either.js"; -import * as O from "fp-ts/lib/Option.js"; import { useRecordContext } from "ra-core"; import * as React from "react"; import { Button } from "react-admin"; import { useNavigate } from "react-router"; import { useDataProvider } from "../../../hooks/useDataProvider.js"; -import { toBNDocument } from "../../Common/BlockNote/utils/utils.js"; import { ErrorBox } from "../../Common/ErrorBox.js"; import { Box, MenuItem, Select } from "../../mui/index.js"; import EventPreview from "../previews/EventPreview.js"; @@ -40,24 +35,8 @@ export const CreateEventFromLinkButton: React.FC = () => { return Promise.resolve(fp.E.right(suggestion)); } - const result = await apiProvider - .get("open-graph/metadata", { url: link.url, type: "Link" }) - .then(async ({ data: { metadata: m, relations } }: any) => { - const suggestions = await getSuggestions(toBNDocument)( - m, - O.some(link), - O.fromNullable(link.image as Media), - getRelationIdsFromEventRelations(relations.entities), - ); - - const suggestEvent = suggestions.find((t) => t.event.type === type); - if (suggestEvent) { - return fp.E.right(suggestEvent); - } - return fp.E.left(new Error("No suggestion found")); - }); - - return result; + const result = await apiProvider.post("events", { url: link.url, type }); + return result.data; }, [record, type], ); diff --git a/packages/@liexp/ui/src/components/admin/links/SuggestedEntityRelationsBox.tsx b/packages/@liexp/ui/src/components/admin/links/SuggestedEntityRelationsBox.tsx index e02932e584..f0cd5a5363 100644 --- a/packages/@liexp/ui/src/components/admin/links/SuggestedEntityRelationsBox.tsx +++ b/packages/@liexp/ui/src/components/admin/links/SuggestedEntityRelationsBox.tsx @@ -157,8 +157,8 @@ export const SuggestedEntityRelationsBox: React.FC< const [importancePercentage, setImportancePercentage] = React.useState(25); const { sentences, excludedSentences } = React.useMemo(() => { - const excludedSentences = exclude?.sentences.map((s) => s.text) ?? []; - const sentences = data.sentences.map((s) => ({ + const excludedSentences = exclude?.sentences?.map((s) => s.text) ?? []; + const sentences = (data.sentences ?? []).map((s) => ({ text: s.text, importance: s.importance, excluded: excludedSentences.includes(s.text), @@ -181,6 +181,10 @@ export const SuggestedEntityRelationsBox: React.FC< }; }, [data.sentences, exclude?.sentences, importancePercentage]); + if (!data.entities) { + return null; + } + return ( =18.0.0'} - '@aws-sdk/client-sso-oidc@3.726.0': - resolution: {integrity: sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw==} + '@aws-sdk/client-sso-oidc@3.731.1': + resolution: {integrity: sha512-jli6vZ3U33L5AHkBqQmB5pO9+R+qfWxsnc1VOsYsNwWVrrR6kA7WS+N+r19BZGHE6Rzo/fWo0KsHH1fc9mGjaw==} engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.726.0 - '@aws-sdk/client-sso@3.726.0': - resolution: {integrity: sha512-NM5pjv2qglEc4XN3nnDqtqGsSGv1k5YTmzDo3W3pObItHmpS8grSeNfX9zSH+aVl0Q8hE4ZIgvTPNZ+GzwVlqg==} + '@aws-sdk/client-sso@3.731.0': + resolution: {integrity: sha512-O4C/UYGgqMsBg21MMApFdgyh8BX568hQhbdoNFmRVTBoSnCZ3w+H4a1wBPX4Gyl0NX+ab6Xxo9rId8HiyPXJ0A==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sts@3.726.1': - resolution: {integrity: sha512-qh9Q9Vu1hrM/wMBOBIaskwnE4GTFaZu26Q6WHwyWNfj7J8a40vBxpW16c2vYXHLBtwRKM1be8uRLkmDwghpiNw==} + '@aws-sdk/client-sts@3.731.1': + resolution: {integrity: sha512-JHHyzmd8b61HACSwLBR1w+uKL+SMs3c7AVH8h6FtW0zWJv8MR01nZ6RJxVA41F53JDZxx3mHzpLzgaTeEGzosw==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.723.0': - resolution: {integrity: sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==} + '@aws-sdk/core@3.731.0': + resolution: {integrity: sha512-ithBN1VWASkvAIlozJmenqDvNnFddr/SZXAs58+jCnBHgy3tXLHABZGVNCjetZkHRqNdXEO1kirnoxaFeXMeDA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.723.0': - resolution: {integrity: sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==} + '@aws-sdk/credential-provider-env@3.731.0': + resolution: {integrity: sha512-h0WWZg4QMLgFVyIvQrC43zpVqsUWg1mPM1clpogP43B8+wEhDEQ4qWRzvFs3dQ4cqx/FLyDUZZF4cqgd94z7kw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.723.0': - resolution: {integrity: sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==} + '@aws-sdk/credential-provider-http@3.731.0': + resolution: {integrity: sha512-iRtrjtcYaWgbvtu2cvDhIsPWXZGvhy1Hgks4682MEBNTc9AUwlfvDrYz2EEnTtJJyrbOdEHVrYrzqD8qPyVLCg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.726.0': - resolution: {integrity: sha512-seTtcKL2+gZX6yK1QRPr5mDJIBOatrpoyrO8D5b8plYtV/PDbDW3mtDJSWFHet29G61ZmlNElyXRqQCXn9WX+A==} + '@aws-sdk/credential-provider-ini@3.731.1': + resolution: {integrity: sha512-0M0ejuqW8iHNcTH2ZXSY9m+I7Y06qVkj6k3vfQU9XaB//mTUCxxfGfqWAtgfr7Yi73egABTcPc0jyPdcvSW4Kw==} engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.726.0 - '@aws-sdk/credential-provider-node@3.726.0': - resolution: {integrity: sha512-jjsewBcw/uLi24x8JbnuDjJad4VA9ROCE94uVRbEnGmUEsds75FWOKp3fWZLQlmjLtzsIbJOZLALkZP86liPaw==} + '@aws-sdk/credential-provider-node@3.731.1': + resolution: {integrity: sha512-5c0ZiagMTPmWilXNffeXJCLoCEz97jilHr3QJWwf2GaTay4tzN+Ld71rpdfEenzUR7fuxEWFfVlwQbFOzFNYHg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.723.0': - resolution: {integrity: sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==} + '@aws-sdk/credential-provider-process@3.731.0': + resolution: {integrity: sha512-6yNMY6q3xHLbs2f2+C6GhvMrjTgtFBiPJJqKaPLsTIhlTRvh4sK8pGm3ITcma0jOxtPDIuoPfBAV8N8XVMBlZg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.726.0': - resolution: {integrity: sha512-WxkN76WeB08j2yw7jUH9yCMPxmT9eBFd9ZA/aACG7yzOIlsz7gvG3P2FQ0tVg25GHM0E4PdU3p/ByTOawzcOAg==} + '@aws-sdk/credential-provider-sso@3.731.1': + resolution: {integrity: sha512-p1tp+rMUf5YNQLr8rVRmDgNtKGYLL0KCdq3K2hwwvFnx9MjReF1sA4lfm3xWsxBQM+j3QN9AvMQqBzDJ+NOSdw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.723.0': - resolution: {integrity: sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==} + '@aws-sdk/credential-provider-web-identity@3.731.1': + resolution: {integrity: sha512-+ynAvEGWDR5ZJFxgpwwzhvlQ3WQ7BleWXU6JwpIw3yFrD4eZEn85b8DZC1aEz7C9kb1HSV6B3gpqHqlyS6wj8g==} engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.723.0 - '@aws-sdk/lib-storage@3.726.1': - resolution: {integrity: sha512-WuDxSZ8Bfe1N7gn5eXQ02dhlKWCAwW5qQErpJ4CCddXosF+gLxhGkrP9LkaaP0CpA3PxboHyET6HbWAggOWtqA==} + '@aws-sdk/lib-storage@3.732.0': + resolution: {integrity: sha512-A8dTXliJlb7GQKbI1sQ2v8N37s3A6HxlK/dGXzGvuvrMJYN1z+nCpq07ELtCikESYDPXHmKDba98cIIkNdXIwA==} engines: {node: '>=18.0.0'} peerDependencies: - '@aws-sdk/client-s3': ^3.726.1 + '@aws-sdk/client-s3': ^3.732.0 - '@aws-sdk/middleware-bucket-endpoint@3.726.0': - resolution: {integrity: sha512-vpaP80rZqwu0C3ELayIcRIW84/nd1tadeoqllT+N9TDshuEvq4UJ+w47OBHB7RkHFJoc79lXXNYle0fdQdaE/A==} + '@aws-sdk/middleware-bucket-endpoint@3.731.0': + resolution: {integrity: sha512-G9vuGW5GWCbzGOwlGFJcOkfxhw1cB6vzcv75QTT0CmciLXK+Cio8O2pqMSTTF2kg9Y6iHVC2BlOtLRkJAVOxVQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-expect-continue@3.723.0': - resolution: {integrity: sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==} + '@aws-sdk/middleware-expect-continue@3.731.0': + resolution: {integrity: sha512-oY4nsY/mb5O5eZCzIuWpyvzO45Bi6UBtE48IaJsoyVctagA1l8hB66aczH9M1NHNjvbS4Beu1agwh3Nyb1eJug==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.723.0': - resolution: {integrity: sha512-JY76mrUCLa0FHeMZp8X9+KK6uEuZaRZaQrlgq6zkXX/3udukH0T3YdFC+Y9uw5ddbiwZ5+KwgmlhnPpiXKfP4g==} + '@aws-sdk/middleware-flexible-checksums@3.732.0': + resolution: {integrity: sha512-MIbF6cYWg5noRO1kRZNC0vewj6qzSYL/BGNlPxRQcqb6egUiGrhPEi8Y/qqweB7MlBHsqSO5YNPwH/Py8ToSVw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.723.0': - resolution: {integrity: sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==} + '@aws-sdk/middleware-host-header@3.731.0': + resolution: {integrity: sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-location-constraint@3.723.0': - resolution: {integrity: sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw==} + '@aws-sdk/middleware-location-constraint@3.731.0': + resolution: {integrity: sha512-1I2EjAFxrQksrzqdN7YYuY/q2YsjqeX4l7f9VOkdBjiZeDvVIEdM99IT5sISJB/r6CjNrYX5MhqGhE8i1VFchA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.723.0': - resolution: {integrity: sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==} + '@aws-sdk/middleware-logger@3.731.0': + resolution: {integrity: sha512-IIZrOdjbY2vKzPJPrwE7FoFQCIPEL6UqURi8LEaiVyCag4p2fvaTN5pgKuQtGC2+iYd/HHcGT4qn2bAqF5Jmmw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.723.0': - resolution: {integrity: sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==} + '@aws-sdk/middleware-recursion-detection@3.731.0': + resolution: {integrity: sha512-y6FLASB1iKWuR5tUipMyo77bt0lEl3OnCrrd2xw/H24avq1HhJjjPR0HHhJE6QKJzF/FYXeV88tcyPSMe32VDw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.723.0': - resolution: {integrity: sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==} + '@aws-sdk/middleware-sdk-s3@3.731.0': + resolution: {integrity: sha512-J9aKyQaVoec5eWTSDfO4h2sKHNP0wTzN15LFcHnkD+e/d0rdmOi7BTkkbJrIaynma9WShIasmrtM3HNi9GiiTA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-ssec@3.723.0': - resolution: {integrity: sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==} + '@aws-sdk/middleware-ssec@3.731.0': + resolution: {integrity: sha512-1HP4lxGcQx4awXgxfL8t9faBK7TqEL7zkAZrm/YBbLrT9oQomxZOHKIOHvo5VVh4qmsNBdqnH2XUlSMY71gsww==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.726.0': - resolution: {integrity: sha512-hZvzuE5S0JmFie1r68K2wQvJbzyxJFdzltj9skgnnwdvLe8F/tz7MqLkm28uV0m4jeHk0LpiBo6eZaPkQiwsZQ==} + '@aws-sdk/middleware-user-agent@3.731.0': + resolution: {integrity: sha512-Ngr2Gz0aec/uduoKaO3srN52SYkEHndYtFzkK/gDUyQwQzi4ha2eIisxPiuHEX6RvXT31V9ouqn/YtVkt0R76A==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.723.0': - resolution: {integrity: sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==} + '@aws-sdk/nested-clients@3.731.1': + resolution: {integrity: sha512-/L8iVrulnXZl+kgmTn+oxRxNnhcSIbf+r12C06vGUq60w0YMidLvxJZN7vt8H9SnCAGCHqud2MS7ExCEvhc0gA==} engines: {node: '>=18.0.0'} - '@aws-sdk/s3-request-presigner@3.726.1': - resolution: {integrity: sha512-IoM/u1gaZiSHEZkkf+Hn6MvCFUtLJgJysApW6NFbM2GYt4hqGLX5jhbjo5KVxC3wFfAhAwK1deSOM0FriBrKrg==} + '@aws-sdk/region-config-resolver@3.731.0': + resolution: {integrity: sha512-XlDpRNkDVHF59f07JmkuAidEv//m3hT6/JL85h0l3+zrpaRWhf8n8lVUyAPNq35ZujK8AcorYM+93u7hdWsliQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.723.0': - resolution: {integrity: sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==} + '@aws-sdk/s3-request-presigner@3.732.0': + resolution: {integrity: sha512-aIzl8UDZp1fNS6haLKmyHcLXg1vWhu9Yimz/9W1xElGB3XZc0LsTlp57yVTmx9ROYo3kAh+Z6RhF73bESTOmjA==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.723.0': - resolution: {integrity: sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==} + '@aws-sdk/signature-v4-multi-region@3.731.0': + resolution: {integrity: sha512-1r/b4Os15dR+BCVRRLVQJMF7Krq6xX6IKHxN43kuvODYWz8Nv3XDlaSpeRpAzyJuzW/fTp4JgE+z0+gmJfdEeA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.731.1': + resolution: {integrity: sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==} engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.723.0 - '@aws-sdk/types@3.723.0': - resolution: {integrity: sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==} + '@aws-sdk/types@3.731.0': + resolution: {integrity: sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==} engines: {node: '>=18.0.0'} '@aws-sdk/util-arn-parser@3.723.0': resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.726.0': - resolution: {integrity: sha512-sLd30ASsPMoPn3XBK50oe/bkpJ4N8Bpb7SbhoxcY3Lk+fSASaWxbbXE81nbvCnkxrZCvkPOiDHzJCp1E2im71A==} + '@aws-sdk/util-endpoints@3.731.0': + resolution: {integrity: sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-format-url@3.723.0': - resolution: {integrity: sha512-70+xUrdcnencPlCdV9XkRqmgj0vLDb8vm4mcEsgabg5QQ3S80KM0GEuhBAIGMkBWwNQTzCgQy2s7xOUlJPbu+g==} + '@aws-sdk/util-format-url@3.731.0': + resolution: {integrity: sha512-wZHObjnYmiz8wFlUQ4/5dHsT7k0at+GvZM02LgvshcRJLnFjYdrzjelMKuNynd/NNK3gLgTsFTGuIgPpz9r4rA==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.568.0': - resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} - engines: {node: '>=16.0.0'} + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.723.0': - resolution: {integrity: sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==} + '@aws-sdk/util-user-agent-browser@3.731.0': + resolution: {integrity: sha512-EnYXxTkCNCjTTBjW/pelRPv4Thsi9jepoB6qQjPMA9/ixrZ71BhhQecz9kgqzZLR9BPCwb6hgJ/Yd702jqJ4aQ==} - '@aws-sdk/util-user-agent-node@3.726.0': - resolution: {integrity: sha512-iEj6KX9o6IQf23oziorveRqyzyclWai95oZHDJtYav3fvLJKStwSjygO4xSF7ycHcTYeCHSLO1FFOHgGVs4Viw==} + '@aws-sdk/util-user-agent-node@3.731.0': + resolution: {integrity: sha512-Rze78Ym5Bx7aWMvmZE2iL3JPo2INNCC5N9rLVx98Gg1G0ZaxclVRUvJrh1AojNlOFxU+otkxAe7FA3Foy2iLLQ==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1656,23 +1628,23 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@blocknote/core@0.22.0': - resolution: {integrity: sha512-AAEx01zK6u+b1SsZniMm/aogEMjasF4vA9ZHgFGj04G7AwK5Hjwa0Sxre58qcW+KzuvR09CQHTkwjmgVmJX/HA==} + '@blocknote/core@0.23.0': + resolution: {integrity: sha512-ulwJ6svm94rpAxzQhv4WybEbzkJUBz6lZa6HYiehHHqUkup2TgxMXqMXDV0lAl4EzuXJoYKhh1Xtv8W3MbBv2Q==} - '@blocknote/mantine@0.22.0': - resolution: {integrity: sha512-6irIKCGUpE47X8qWLx9oa5ndztSrvLEHgVRp+fdVUHMJCx0/OzijJyYTTFKw8yEI9qc01pjmwdYMZrMMZybyGw==} + '@blocknote/mantine@0.23.0': + resolution: {integrity: sha512-nnWGm2eTN+13iDRUAlTwfVQjjwb1m1DRNHrSpoDnHB4moECaehYxwxuDgdK/CtfG01tVcc/OcGUCQB1WwetQ6g==} peerDependencies: react: ^18.0 || ^19.0 || >= 19.0.0-rc react-dom: ^18.0 || ^19.0 || >= 19.0.0-rc - '@blocknote/react@0.22.0': - resolution: {integrity: sha512-Y6Oj99iOKnlh2FE/lgy8kO5PziPnA8MyEJyjCH9Jbvlc9t493L9EFmLK8iKBZek7sh0TOzhXGBOA6lIpk02X6A==} + '@blocknote/react@0.23.0': + resolution: {integrity: sha512-FkHDVgM87aIbI1OW3XGpKrA0q7SfN433jj9UsLc79iAvSHxMRCtq+ZYW+JS9ycayutFHKVtG1sRWB99+I916Sw==} peerDependencies: react: ^18.0 || ^19.0 || >= 19.0.0-rc react-dom: ^18.0 || ^19.0 || >= 19.0.0-rc - '@blocknote/server-util@0.22.0': - resolution: {integrity: sha512-d75ZSCrbwk1XdYglqUb+mKLkezIDT7J5Se9WCopc0DeKPXxoP7SbSEAjxfiAfgNGrB3Gj6um/PvbGKyF3gqB+A==} + '@blocknote/server-util@0.23.0': + resolution: {integrity: sha512-IZ5Dh5bEkFlOwzYN1HUS2areEKpmSjBtHcuMnLaNWjRv1fdm9Yu3RGhPOc7PnSpfn7h9cGU4DcREtPLdxEpDJQ==} peerDependencies: react: ^18.0 || ^19.0 || >= 19.0.0-rc react-dom: ^18.0 || ^19.0 || >= 19.0.0-rc @@ -1915,12 +1887,6 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -1933,12 +1899,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} @@ -1951,12 +1911,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} @@ -1969,12 +1923,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} @@ -1987,12 +1935,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} @@ -2005,12 +1947,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} @@ -2023,12 +1959,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} @@ -2041,12 +1971,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} @@ -2059,12 +1983,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} @@ -2077,12 +1995,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} @@ -2095,12 +2007,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} @@ -2113,12 +2019,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} @@ -2131,12 +2031,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} @@ -2149,12 +2043,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} @@ -2167,12 +2055,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} @@ -2185,12 +2067,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} @@ -2203,12 +2079,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} @@ -2227,12 +2097,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} @@ -2257,12 +2121,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} @@ -2275,12 +2133,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} @@ -2293,12 +2145,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} @@ -2311,12 +2157,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} @@ -2329,12 +2169,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} @@ -2387,11 +2221,11 @@ packages: '@fast-csv/parse@5.0.2': resolution: {integrity: sha512-gMu1Btmm99TP+wc0tZnlH30E/F1Gw1Tah3oMDBHNPe9W8S68ixVHjt89Wg5lh7d9RuQMtwN+sGl5kxR891+fzw==} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.11': - resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -2399,14 +2233,14 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.26.24': - resolution: {integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==} + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} '@fortawesome/fontawesome-common-types@6.7.1': resolution: {integrity: sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ==} @@ -2438,6 +2272,15 @@ packages: '@fortawesome/fontawesome-svg-core': ~1 || ~6 react: '>=16.3' + '@grpc/grpc-js@1.12.5': + resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -2608,6 +2451,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} engines: {node: '>= 10.16.0'} @@ -3008,8 +2854,8 @@ packages: resolution: {integrity: sha512-qHLvScqERDeH7y2cLuJaSAlMwg3f/3Oc9nayRSXRU2UuaK/SOhI42cxiPLj1FnuHJSmN0rBQFkrLx02gI4mcVg==} engines: {node: '>=18'} - '@langchain/core@0.3.29': - resolution: {integrity: sha512-LGjJq/UV43GnEzBpO2NWelIlzsAWoci+FEqofYqDE+F6O3EvTrSyma27NXs8eurM8MqWxjeL0t4RCmCSlJs2RQ==} + '@langchain/core@0.3.30': + resolution: {integrity: sha512-HFUpjJ6FkPSSeLKzCLKxba4VN1DKnrXRmjaWHDb5KUyE9DZrqak3Sh6k2dkzXDJIcdd/uNeeQGFyQnubVEMkPw==} engines: {node: '>=18'} '@langchain/openai@0.3.17': @@ -3037,17 +2883,17 @@ packages: '@lifeomic/attempt@3.1.0': resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==} - '@mantine/core@7.13.2': - resolution: {integrity: sha512-nD8oKIal+KdthqF074+ZG21035QBEAKso2zK9D6zWxRTLVCjLCNSc5JSXrXLrdBTnvPQGY26yunX4+MEPlmrHg==} + '@mantine/core@7.16.1': + resolution: {integrity: sha512-HYdjCeMU3dUJbc1CrAAedeAASTG5kVyL/qsiuYh5b7BoG0qsRtK8WJxBpUjW6VqtJpUaE94c5tlBJ8MgAmPHTQ==} peerDependencies: - '@mantine/hooks': 7.13.2 - react: ^18.2.0 - react-dom: ^18.2.0 + '@mantine/hooks': 7.16.1 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x - '@mantine/hooks@7.13.2': - resolution: {integrity: sha512-NKfGl2sKZw6zF//AfAFJrVDftjg7DKCn0h8rwJBIZCKi9axhwlV0Mvlqe2dep8QuM7O/uLLJSymSKIv1gaxIJg==} + '@mantine/hooks@7.16.1': + resolution: {integrity: sha512-+hER8E4d2ByfQ/DKIXGM3Euxb7IH5ArSjzzzoF21sG095iXIryOCob22ZanrmiXCoAzKKdxqgVj4Di67ikLYSQ==} peerDependencies: - react: ^18.2.0 + react: ^18.x || ^19.x '@mantine/utils@6.0.22': resolution: {integrity: sha512-RSKlNZvxhMCkOFZ6slbYvZYbWjHUM+PxDQnupIOxIdsTZQQjx/BFfrfJ7kQFOP+g7MtpOds8weAetEs5obwMOQ==} @@ -3195,8 +3041,8 @@ packages: '@types/react': optional: true - '@mui/x-data-grid@7.23.6': - resolution: {integrity: sha512-NcCZH99ZBLRlCcfLwwhCkVowNZHgjy0XZ/c6EuTRMSZl1UqF8ouwitP1ZfAa1idDIWCHFhxo446U/93aGMqOyQ==} + '@mui/x-data-grid@7.24.0': + resolution: {integrity: sha512-goYTKDp+e+dXw7E+WndWUhWXTjX3aTqN8W2dCKhXnmE9Gu8dFwG6Azl7GK9l2m5YHGuqYmpWqcSG9etLdwYaVg==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 @@ -3211,8 +3057,8 @@ packages: '@emotion/styled': optional: true - '@mui/x-internals@7.23.6': - resolution: {integrity: sha512-hT1Pa4PNCnxwiauPbYMC3p4DiEF1x05Iu4C1MtC/jMJ1LtthymLmTuQ6ZQ53/R9FeqK6sYd6A6noR+vNMjp5DA==} + '@mui/x-internals@7.24.0': + resolution: {integrity: sha512-lYa/XLltxNMY8YAFDopIHrXda2EAoqMCilyGMuPMz+WTG+b+StlUKqtj8cgFPQ/sa5dQ2fR7R3KJdjLREKUrlQ==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3412,6 +3258,36 @@ packages: '@postman/tunnel-agent@0.6.4': resolution: {integrity: sha512-CJJlq8V7rNKhAw4sBfjixKpJW00SHqebqNUQKxMoepgeWZIbdPcD+rguRcivGhS4N12PymDcKgUgSD4rVC+RjQ==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@puppeteer/browsers@2.6.1': resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} engines: {node: '>=18'} @@ -3476,191 +3352,96 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.28.1': - resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.31.0': resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.1': - resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.31.0': resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.1': - resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.31.0': resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.1': - resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.31.0': resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.1': - resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.31.0': resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.1': - resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.31.0': resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': - resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.1': - resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.31.0': resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.1': - resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.31.0': resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.1': - resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.31.0': resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': - resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} - cpu: [loong64] - os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': - resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.1': - resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.31.0': resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.1': - resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.31.0': resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.1': - resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.31.0': resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.1': - resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.31.0': resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.1': - resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.31.0': resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.1': - resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.31.0': resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.1': - resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.31.0': resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==} cpu: [x64] @@ -3669,23 +3450,29 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@shikijs/core@1.23.1': - resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==} + '@shikijs/core@1.29.1': + resolution: {integrity: sha512-Mo1gGGkuOYjDu5H8YwzmOuly9vNr8KDVkqj9xiKhhhFS8jisAtDSEWB9hzqRHLVQgFdA310e8XRJcW4tYhRB2A==} + + '@shikijs/engine-javascript@1.29.1': + resolution: {integrity: sha512-Hpi8k9x77rCQ7F/7zxIOUruNkNidMyBnP5qAGbLFqg4kRrg1HZhkB8btib5EXbQWTtLb5gBHOdBwshk20njD7Q==} - '@shikijs/engine-javascript@1.23.1': - resolution: {integrity: sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==} + '@shikijs/engine-oniguruma@1.29.1': + resolution: {integrity: sha512-gSt2WhLNgEeLstcweQOSp+C+MhOpTsgdNXRqr3zP6M+BUBZ8Md9OU2BYwUYsALBxHza7hwaIWtFHjQ/aOOychw==} - '@shikijs/engine-oniguruma@1.23.1': - resolution: {integrity: sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==} + '@shikijs/langs@1.29.1': + resolution: {integrity: sha512-iERn4HlyuT044/FgrvLOaZgKVKf3PozjKjyV/RZ5GnlyYEAZFcgwHGkYboeBv2IybQG1KVS/e7VGgiAU4JY2Gw==} - '@shikijs/types@1.23.1': - resolution: {integrity: sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==} + '@shikijs/themes@1.29.1': + resolution: {integrity: sha512-lb11zf72Vc9uxkl+aec2oW1HVTHJ2LtgZgumb4Rr6By3y/96VmlU44bkxEb8WBWH3RUtbqAJEN0jljD9cF7H7g==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/types@1.29.1': + resolution: {integrity: sha512-aBqAuhYRp5vSir3Pc9+QPu9WESBOjUo03ao0IHLC4TyTioSsp/SkbAZSrIH4ghYYC1T1KTEpRSBa83bas4RnPA==} - '@smithy/abort-controller@4.0.0': - resolution: {integrity: sha512-xFNL1ZfluscKiVI0qlPEnu7pL1UgNNIzQdjTPkaO7JCJtIkbArPYNtqbxohuNaQdksJ01Tn1wLbDA5oIp62P8w==} + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + + '@smithy/abort-controller@4.0.1': + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} engines: {node: '>=18.0.0'} '@smithy/chunked-blob-reader-native@4.0.0': @@ -3696,56 +3483,56 @@ packages: resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.0.0': - resolution: {integrity: sha512-29pIDlUY/a9+ChJPAarPiD9cU8fBtBh0wFnmnhj7j5AhgMzc+uyXdfzmziH6xx2jzw54waSP3HfnFkTANZuPYA==} + '@smithy/config-resolver@4.0.1': + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.0.0': - resolution: {integrity: sha512-pKaas7RWvPljJ8uByCeBa10rtbVJCy4N/Fr7OSPxFezcyG0SQuXWnESZqzXj7m2+A+kPzG6fKyP4wrKidl2Ikg==} + '@smithy/core@3.1.1': + resolution: {integrity: sha512-hhUZlBWYuh9t6ycAcN90XOyG76C1AzwxZZgaCVPMYpWqqk9uMFo7HGG5Zu2cEhCJn7DdOi5krBmlibWWWPgdsw==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.0.0': - resolution: {integrity: sha512-+hTShyZHiq2AVFOxJja3k6O17DKU6TaZbwr2y1OH5HQtUw2a+7O3mMR+10LVmc39ef72SAj+uFX0IW9rJGaLQQ==} + '@smithy/credential-provider-imds@4.0.1': + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.0.0': - resolution: {integrity: sha512-YvKUUOo3qehqOxNrkax3YKXF1v0ff475FhDgbBmF8Bo0oOOpsXZyltjQnwBzIeTYo446ZPV85KM3kY4YoxUNOg==} + '@smithy/eventstream-codec@4.0.1': + resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.0.0': - resolution: {integrity: sha512-YRwsVPJU/DN1VshH8tKs4CxY66HLhmDSw6oZDM2LVIgHODsqpJBcRdEfcnb97ULmgyFrWxTjL9UXpyKPuJXQRA==} + '@smithy/eventstream-serde-browser@4.0.1': + resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.0.0': - resolution: {integrity: sha512-OZ/aK9LHsZch0VZ6bnf+dPD80kJripnZnkc36QNymnej49VkHJLSNJxsM0pwt53FA6+fUYYMMT0DVDTH1Msq2g==} + '@smithy/eventstream-serde-config-resolver@4.0.1': + resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.0.0': - resolution: {integrity: sha512-10b4F+zXbzxZHKuP+m2st/C+rEGK7FUut1dNSRw6DQCCfaTUecJGCoHPCmk2CRvuMTzunVpS1BKLMk839318VQ==} + '@smithy/eventstream-serde-node@4.0.1': + resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.0.0': - resolution: {integrity: sha512-HEhZpf731J3oFYJtaKO3dnV6stIjA+lJwXuXGu/WbSgicDWGAOITUwTt9ynldEFsnFkNu9b/C4ebXnJA16xSCA==} + '@smithy/eventstream-serde-universal@4.0.1': + resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.0.0': - resolution: {integrity: sha512-jUEq+4056uqsDLRqQb1fm48rrSMBYcBxVvODfiP37ORcV5n9xWJQsINWcIffyYxWTM5K0Y/GOfhSQGDtWpAPpQ==} + '@smithy/fetch-http-handler@5.0.1': + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} engines: {node: '>=18.0.0'} - '@smithy/hash-blob-browser@4.0.0': - resolution: {integrity: sha512-JBXNC2YCDlm9uqP/eQJbK6auahAaq4HndJC2PURxWPRUDjbXDRJS5Npfi+7zSxKOSOWxXCG/3dLE5D8znI9l/w==} + '@smithy/hash-blob-browser@4.0.1': + resolution: {integrity: sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.0.0': - resolution: {integrity: sha512-25OxGYGnG3JPEOTk4iFE03bfmoC6GXUQ4L13z4cNdsS3mkncH22AGSDRfKwwEqutNUxXQZWVy9f72Fm59C9qlg==} + '@smithy/hash-node@4.0.1': + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} engines: {node: '>=18.0.0'} - '@smithy/hash-stream-node@4.0.0': - resolution: {integrity: sha512-MRgYnr9atik1c02mdgjjJkNK5A8IvRRlpa/zOdA8PxmQtBCwjODKzobyI166uamxrL20wg7vuKoVSAjQU4IXfw==} + '@smithy/hash-stream-node@4.0.1': + resolution: {integrity: sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.0.0': - resolution: {integrity: sha512-0GTyet02HX/sPctEhOExY+3HI7hwkVwOoJg0XnItTJ+Xw7JMuL9FOxALTmKVIV6+wg0kF6veLeg72hVSbD9UCw==} + '@smithy/invalid-dependency@4.0.1': + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -3756,76 +3543,76 @@ packages: resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} engines: {node: '>=18.0.0'} - '@smithy/md5-js@4.0.0': - resolution: {integrity: sha512-NUjbK+M1RNd0J/mM3eh4Yw5SfUrJBsIAea/H5dvc8tirxWFHFDUHJ/CK40/vtY3niiYnygWjZZ+ISydray6Raw==} + '@smithy/md5-js@4.0.1': + resolution: {integrity: sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.0.0': - resolution: {integrity: sha512-nM1RJqLwkSCidumGK8WwNEZ0a0D/4LkwqdPna+QmHrdPoAK6WGLyZFosdMpsAW1OIbDLWGa+r37Mo4Vth4S4kQ==} + '@smithy/middleware-content-length@4.0.1': + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.0.0': - resolution: {integrity: sha512-/f6z5SqUurmqemhBZNhM0c+C7QW0AY/zJpic//sbdu26q98HSPAI/xvzStjYq+UhtWeAe/jaX6gamdL/2r3W1g==} + '@smithy/middleware-endpoint@4.0.2': + resolution: {integrity: sha512-Z9m67CXizGpj8CF/AW/7uHqYNh1VXXOn9Ap54fenWsCa0HnT4cJuE61zqG3cBkTZJDCy0wHJphilI41co/PE5g==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.0.0': - resolution: {integrity: sha512-K6tsFp3Ik44H3694a+LWoXLV8mqy8zn6/vTw2feU72MaIzi51EHMVNNxxpL6e2GI6oxw8FFRGWgGn8+wQRrHZQ==} + '@smithy/middleware-retry@4.0.3': + resolution: {integrity: sha512-TiKwwQTwUDeDtwWW8UWURTqu7s6F3wN2pmziLU215u7bqpVT9Mk2oEvURjpRLA+5XeQhM68R5BpAGzVtomsqgA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.0.0': - resolution: {integrity: sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==} + '@smithy/middleware-serde@4.0.1': + resolution: {integrity: sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.0.0': - resolution: {integrity: sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==} + '@smithy/middleware-stack@4.0.1': + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.0.0': - resolution: {integrity: sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==} + '@smithy/node-config-provider@4.0.1': + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.0.0': - resolution: {integrity: sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==} + '@smithy/node-http-handler@4.0.2': + resolution: {integrity: sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.0.0': - resolution: {integrity: sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==} + '@smithy/property-provider@4.0.1': + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.0.0': - resolution: {integrity: sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==} + '@smithy/protocol-http@5.0.1': + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.0.0': - resolution: {integrity: sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==} + '@smithy/querystring-builder@4.0.1': + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.0.0': - resolution: {integrity: sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==} + '@smithy/querystring-parser@4.0.1': + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.0.0': - resolution: {integrity: sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==} + '@smithy/service-error-classification@4.0.1': + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.0.0': - resolution: {integrity: sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==} + '@smithy/shared-ini-file-loader@4.0.1': + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.0.0': - resolution: {integrity: sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==} + '@smithy/signature-v4@5.0.1': + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.0.0': - resolution: {integrity: sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==} + '@smithy/smithy-client@4.1.2': + resolution: {integrity: sha512-0yApeHWBqocelHGK22UivZyShNxFbDNrgREBllGh5Ws0D0rg/yId/CJfeoKKpjbfY2ju8j6WgDUGZHYQmINZ5w==} engines: {node: '>=18.0.0'} - '@smithy/types@4.0.0': - resolution: {integrity: sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==} + '@smithy/types@4.1.0': + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.0.0': - resolution: {integrity: sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==} + '@smithy/url-parser@4.0.1': + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.0.0': @@ -3852,32 +3639,32 @@ packages: resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.0.0': - resolution: {integrity: sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==} + '@smithy/util-defaults-mode-browser@4.0.3': + resolution: {integrity: sha512-7c5SF1fVK0EOs+2EOf72/qF199zwJflU1d02AevwKbAUPUZyE9RUZiyJxeUmhVxfKDWdUKaaVojNiaDQgnHL9g==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.0.0': - resolution: {integrity: sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==} + '@smithy/util-defaults-mode-node@4.0.3': + resolution: {integrity: sha512-CVnD42qYD3JKgDlImZ9+On+MqJHzq9uJgPbMdeBE8c2x8VJ2kf2R3XO/yVFx+30ts5lD/GlL0eFIShY3x9ROgQ==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.0.0': - resolution: {integrity: sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==} + '@smithy/util-endpoints@3.0.1': + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.0.0': resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.0.0': - resolution: {integrity: sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==} + '@smithy/util-middleware@4.0.1': + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.0.0': - resolution: {integrity: sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==} + '@smithy/util-retry@4.0.1': + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.0.0': - resolution: {integrity: sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==} + '@smithy/util-stream@4.0.2': + resolution: {integrity: sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.0.0': @@ -3892,8 +3679,8 @@ packages: resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.0.0': - resolution: {integrity: sha512-C8dSfGmZH0ecrmnJOw4aDXJ47krihnUtee8eDZ2fA+28wTjD4TVM3L/bBQYnBBlDVWcYzldLV7loPRsPc1kERg==} + '@smithy/util-waiter@4.0.2': + resolution: {integrity: sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==} engines: {node: '>=18.0.0'} '@snyk/github-codeowners@1.1.0': @@ -3907,105 +3694,105 @@ packages: '@sqltools/formatter@1.2.5': resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} - '@storybook/addon-actions@8.4.7': - resolution: {integrity: sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==} + '@storybook/addon-actions@8.5.0': + resolution: {integrity: sha512-6CW9+17rk5eNx6I8EKqCxRKtsJFTR/lHL+xiJ6/iBWApIm8sg63vhXvUTJ58UixmIkT5oLh0+ESNPh+x10D8fw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-backgrounds@8.4.7': - resolution: {integrity: sha512-I4/aErqtFiazcoWyKafOAm3bLpxTj6eQuH/woSbk1Yx+EzN+Dbrgx1Updy8//bsNtKkcrXETITreqHC+a57DHQ==} + '@storybook/addon-backgrounds@8.5.0': + resolution: {integrity: sha512-lzyFLs7niNsqlhH5kdUrp7htLiMIcjY50VLWe0PaeJ6T6GZ7X9qhQzROAUV6cGqzyd8A6y/LzIUntDPMVEm/6g==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-controls@8.4.7': - resolution: {integrity: sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==} + '@storybook/addon-controls@8.5.0': + resolution: {integrity: sha512-1fivx77A/ahObrPl0L66o9i9MUNfqXxsrpekne5gjMNXw9XJFIRNUe/ddL4CMmwu7SgVbj2QV+q5E5mlnZNTJw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-docs@8.4.7': - resolution: {integrity: sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==} + '@storybook/addon-docs@8.5.0': + resolution: {integrity: sha512-REwLSr1VgOVNJZwP3y3mldhOjBHlM5fqTvq/tC8NaYpAzx9O4rZdoUSZxW3tYtoNoYrHpB8kzRTeZl8WSdKllw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-essentials@8.4.7': - resolution: {integrity: sha512-+BtZHCBrYtQKILtejKxh0CDRGIgTl9PumfBOKRaihYb4FX1IjSAxoV/oo/IfEjlkF5f87vouShWsRa8EUauFDw==} + '@storybook/addon-essentials@8.5.0': + resolution: {integrity: sha512-RrHRdaw2j3ugZiYQ6OHt3Ff08ID4hwAvipqULEsbEnEw3VlXOaW/MT5e2M7kW3MHskQ3iJ6XAD1Y1rNm432Pzw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-highlight@8.4.7': - resolution: {integrity: sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==} + '@storybook/addon-highlight@8.5.0': + resolution: {integrity: sha512-/JxYzMK5aJSYs0K/0eAEFyER2dMoxqwM891MdnkNwLFdyrM58lzHee00F9oEX6zeQoRUNQPRepq0ui2PvbTMGw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-interactions@8.4.7': - resolution: {integrity: sha512-fnufT3ym8ht3HHUIRVXAH47iOJW/QOb0VSM+j269gDuvyDcY03D1civCu1v+eZLGaXPKJ8vtjr0L8zKQ/4P0JQ==} + '@storybook/addon-interactions@8.5.0': + resolution: {integrity: sha512-vX1a8qS7o/W3kEzfL/CqOj/Rr6UlGLT/n0KXMpfIhx63tzxe1a1qGpFLL0h0zqAVPHZIOu9humWMKri5Iny6oA==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-links@8.4.7': - resolution: {integrity: sha512-L/1h4dMeMKF+MM0DanN24v5p3faNYbbtOApMgg7SlcBT/tgo3+cAjkgmNpYA8XtKnDezm+T2mTDhB8mmIRZpIQ==} + '@storybook/addon-links@8.5.0': + resolution: {integrity: sha512-Y11GIByAYqn0TibI/xsy0vCe+ZxJS9PVAAoHngLxkf9J4WodAXcJABr8ZPlWDNdaEhSS/FF7UQUmNag0UC2/pw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.7 + storybook: ^8.5.0 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.4.7': - resolution: {integrity: sha512-QfvqYWDSI5F68mKvafEmZic3SMiK7zZM8VA0kTXx55hF/+vx61Mm0HccApUT96xCXIgmwQwDvn9gS4TkX81Dmw==} + '@storybook/addon-measure@8.5.0': + resolution: {integrity: sha512-e8pJy2sICyj0Ff0W1PFc6HPE6PqcjnnHtfuDaO3M9uSKJLYkpTWJ8i1VSP178f8seq44r5/PdQCHqs5q5l3zgw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-outline@8.4.7': - resolution: {integrity: sha512-6LYRqUZxSodmAIl8icr585Oi8pmzbZ90aloZJIpve+dBAzo7ydYrSQxxoQEVltXbKf3VeVcrs64ouAYqjisMYA==} + '@storybook/addon-outline@8.5.0': + resolution: {integrity: sha512-r12sk1b38Ph6NroWAOTfjbJ/V+gDobm7tKQQlbSDf6fgX7cqyPHmKjfNDCOCQpXouZm/Jm+41zd758PW+Yt4ng==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-toolbars@8.4.7': - resolution: {integrity: sha512-OSfdv5UZs+NdGB+nZmbafGUWimiweJ/56gShlw8Neo/4jOJl1R3rnRqqY7MYx8E4GwoX+i3GF5C3iWFNQqlDcw==} + '@storybook/addon-toolbars@8.5.0': + resolution: {integrity: sha512-q3yYYO2WX8K2DYNM++FzixGDjzYaeREincgsl2WXYXrcuGb5hkOoOgRiAQL8Nz9NQ1Eo+B/yZxrhG/5VoVhUUQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-viewport@8.4.7': - resolution: {integrity: sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==} + '@storybook/addon-viewport@8.5.0': + resolution: {integrity: sha512-MlhVELImk9YzjEgGR2ciLC8d5tUSGcO7my4kWIClN0VyTRcvG4ZfwrsEC+jN3/l52nrgjLmKrDX5UAGZm6w5mQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/blocks@8.4.7': - resolution: {integrity: sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==} + '@storybook/blocks@8.5.0': + resolution: {integrity: sha512-2sTOgjH/JFOgWnpqkKjpKVvKAgUaC9ZBjH1gnCoA5dne/SDafYaCAYfv6yZn7g2Xm1sTxWCAmMIUkYSALeWr+w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.7 + storybook: ^8.5.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.4.7': - resolution: {integrity: sha512-LovyXG5VM0w7CovI/k56ZZyWCveQFVDl0m7WwetpmMh2mmFJ+uPQ35BBsgTvTfc8RHi+9Q3F58qP1MQSByXi9g==} + '@storybook/builder-vite@8.5.0': + resolution: {integrity: sha512-GVJFjAxX/mL3bmXX6N619ShuYprkh6Ix08JU6QGNf/tTkG92BxjgCqQdfovBrviDhFyO2bhkdlEp6ujMo5CbZA==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/components@8.4.7': - resolution: {integrity: sha512-uyJIcoyeMWKAvjrG9tJBUCKxr2WZk+PomgrgrUwejkIfXMO76i6jw9BwLa0NZjYdlthDv30r9FfbYZyeNPmF0g==} + '@storybook/components@8.5.0': + resolution: {integrity: sha512-DhaHtwfEcfWYj3ih/5RBSDHe3Idxyf+oHw2/DmaLKJX6MluhdK3ZqigjRcTmA9Gj/SbR4CkHEEtDzAvBlW0BYw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.7': - resolution: {integrity: sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==} + '@storybook/core@8.5.0': + resolution: {integrity: sha512-apborO6ynns7SeydBSqE9o0zT6JSU+VY4gLFPJROGcconvSW4bS5xtJCsgjlulceyWVxepFHGXl4jEZw+SktXA==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.4.7': - resolution: {integrity: sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==} + '@storybook/csf-plugin@8.5.0': + resolution: {integrity: sha512-cs6ogviNyLG1h9J8Sb47U3DqIrQmn2EHm4ta3fpCeV3ABbrMgbzYyxtmybz4g/AwlDgjAZAt6PPcXkfCJ6p2CQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 '@storybook/csf@0.1.12': resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} @@ -4020,45 +3807,49 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/instrumenter@8.4.7': - resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} + '@storybook/instrumenter@8.5.0': + resolution: {integrity: sha512-eZ/UY6w4U2vay+wX7QVwKiRoyMzZscuv6v4k4r8BlmHPFWbhiZDO9S2GsG16UkyKnrQrYk432he70n7hn1Xvmg==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/manager-api@8.4.7': - resolution: {integrity: sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==} + '@storybook/manager-api@8.5.0': + resolution: {integrity: sha512-Ildriueo3eif4M+gMlMxu/mrBIbAnz8+oesmQJKdzZfe/U9eQTI9OUqJsxx/IVBmdzQ3ySsgNmzj5VweRkse4A==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.4.7': - resolution: {integrity: sha512-0QVQwHw+OyZGHAJEXo6Knx+6/4er7n2rTDE5RYJ9F2E2Lg42E19pfdLlq2Jhoods2Xrclo3wj6GWR//Ahi39Eg==} + '@storybook/preview-api@8.5.0': + resolution: {integrity: sha512-g0XbD54zMUkl6bpuA7qEBCE9rW1QV6KKmwkO4bkxMOJcMke3x9l00JTaYn7Un8wItjXiS3BIG15B6mnfBG7fng==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.4.7': - resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} + '@storybook/react-dom-shim@8.5.0': + resolution: {integrity: sha512-7P8xg4FiuFpM6kQOzZynno+0zyLVs8NgsmRK58t3JRZXbda1tzlxTXzvqx4hUevvbPJGjmrB0F3xTFH+8Otnvw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/react-vite@8.4.7': - resolution: {integrity: sha512-iiY9iLdMXhDnilCEVxU6vQsN72pW3miaf0WSenOZRyZv3HdbpgOxI0qapOS0KCyRUnX9vTlmrSPTMchY4cAeOg==} + '@storybook/react-vite@8.5.0': + resolution: {integrity: sha512-4f5AM8aPs2aTBeiycotinaDIPJg/YRtPb0F1dDquS097eUOeImS73+NSSCwrIjmSiapG/KWVkPgFnadEumFkAA==} engines: {node: '>=18.0.0'} peerDependencies: + '@storybook/test': 8.5.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.7 + storybook: ^8.5.0 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true - '@storybook/react@8.4.7': - resolution: {integrity: sha512-nQ0/7i2DkaCb7dy0NaT95llRVNYWQiPIVuhNfjr1mVhEP7XD090p0g7eqUmsx8vfdHh2BzWEo6CoBFRd3+EXxw==} + '@storybook/react@8.5.0': + resolution: {integrity: sha512-/jbkmGGc95N7KduIennL/k8grNTP5ye/YBnkcS4TbF7uDWBtKy3/Wqvx5BIlFXq3qeUnZJ8YtZc0lPIYeCY8XQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.4.7 + '@storybook/test': 8.5.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.7 + storybook: ^8.5.0 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -4066,26 +3857,26 @@ packages: typescript: optional: true - '@storybook/test@8.4.7': - resolution: {integrity: sha512-AhvJsu5zl3uG40itSQVuSy5WByp3UVhS6xAnme4FWRwgSxhvZjATJ3AZkkHWOYjnnk+P2/sbz/XuPli1FVCWoQ==} + '@storybook/test@8.5.0': + resolution: {integrity: sha512-M/DdPlI6gwL7NGkK5o7GYjdEBp95AsFEUtW29zQfnVIAngYugzi3nIuM/XkQHunidVdAZCYjw2s2Yhhsx/m9sw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/theming@8.4.7': - resolution: {integrity: sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==} + '@storybook/theming@8.5.0': + resolution: {integrity: sha512-591LbOj/HMmHYUfLgrMerxhF1A9mY61HWKxcRpB6xxalc1Xw1kRtQ49DcwuTXnUu9ktBB3nuOzPNPQPFSh/7PQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@tanstack/eslint-plugin-query@5.62.9': - resolution: {integrity: sha512-F3onhTcpBj7zQDo0NVtZwZQKRFx8BwpSabMJybl9no3+dFHUurvNMrH5M/6KNpkdDCf3zyHWadruZL6636B8Fw==} + '@tanstack/eslint-plugin-query@5.62.16': + resolution: {integrity: sha512-VhnHSQ/hc62olLzGhlLJ4BJGWynwjs3cDMsByasKJ3zjW1YZ+6raxOv0gHHISm+VEnAY42pkMowmSWrXfL4NTw==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@tanstack/query-core@5.64.0': - resolution: {integrity: sha512-/MPJt/AaaMzdWJZTafgMyYhEX/lGjQrNz8+NDQSk8fNoU5PHqh05FhQaBrEQafW2PeBHsRbefEf//qKMiSAbQQ==} + '@tanstack/query-core@5.64.1': + resolution: {integrity: sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==} - '@tanstack/react-query@5.64.0': - resolution: {integrity: sha512-tBMzlROROUcTDMpDt1NC3n9ndKnJHPB3RCpa6Bf9f31TFvqhLz879x8jldtKU+6IwMSw1Pn4K1AKA+2SYyA6TA==} + '@tanstack/react-query@5.64.1': + resolution: {integrity: sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==} peerDependencies: react: ^18 || ^19 @@ -4103,125 +3894,125 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@2.8.0': - resolution: {integrity: sha512-xsqDI4BNzYRWRtBq7+/38ThhqEr7uG9Njip1x+9/wgR3vWPBFnBkYJTz6jSxS35NRE6BSnERm4/B/vrLuY1Hdw==} + '@tiptap/core@2.11.3': + resolution: {integrity: sha512-ibfi6U1gMRLo319Re6olv8uAuxtUpK343ygcVoZrJ8O4sqRnU9CEqPAM+n7YAKlOks1+Di0sTheIxZRak7Pj4g==} peerDependencies: '@tiptap/pm': ^2.7.0 - '@tiptap/extension-bold@2.8.0': - resolution: {integrity: sha512-U1YkZBxDkSLNvPNiqxB5g42IeJHr27C7zDb/yGQN2xL4UBeg4O9xVhCFfe32f6tLwivSL0dar4ScElpaCJuqow==} + '@tiptap/extension-bold@2.11.3': + resolution: {integrity: sha512-YafJ+BavtzQBir81HoM62G0cik1ww7zNcElkg35sQWtVFnT99s+fLEuSurixtmiLdgmSSb/YsPrCmNp/R75zOw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-bubble-menu@2.8.0': - resolution: {integrity: sha512-swg+myJPN60LduQvLMF4hVBqP5LOIN01INZBzBI8egz8QufqtSyRCgXl7Xcma0RT5xIXnZSG9XOqNFf2rtkjKA==} + '@tiptap/extension-bubble-menu@2.11.3': + resolution: {integrity: sha512-KOAy9zCzqssJO7cGIwZNgv2hFyxrZ2AHoWptICPA79nVZrHQQw2ZP1/FDTR8cDEZzLQMbpgGqQhUhjZcAs3/zQ==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-code@2.8.0': - resolution: {integrity: sha512-VSFn3sFF6qPpOGkXFhik8oYRH5iByVJpFEFd/duIEftmS0MdPzkbSItOpN3mc9xsJ5dCX80LYaResSj5hr5zkA==} + '@tiptap/extension-code@2.11.3': + resolution: {integrity: sha512-w36Pb4DlB/cQZwsIpd5pSDwYuLBBSGh6dwGc9TVUdv+hdh8vIsnkGCjynapXgUrT2RFEJwObRYK+r5Gw84uGSA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-collaboration-cursor@2.8.0': - resolution: {integrity: sha512-48UtdoF5ZXNPEkEKYOh+NQEdw+/6jrZp/VOrvEs/pdL0XqPgHsW0cpEV7D69l1sLheiMhMeOGC0iX+0Du6g1Yg==} + '@tiptap/extension-collaboration-cursor@2.11.3': + resolution: {integrity: sha512-Hw6ByVzE8KiuPqSC3BTFDFIidrtlyrJnJJ9Ff3PCMgloLz89H910yvWyAXnw8OhlzdZBRVdWML53kVS+402suw==} peerDependencies: '@tiptap/core': ^2.7.0 y-prosemirror: ^1.2.11 - '@tiptap/extension-collaboration@2.8.0': - resolution: {integrity: sha512-Ae5NZWj2aq8ZElsGxQiq3cAxxbb0cR7VHvmIG1mPA6USvrQL6/xtBVutersBqINFELmIuxh/jm8qVffBm2qXyg==} + '@tiptap/extension-collaboration@2.11.3': + resolution: {integrity: sha512-2zZrd1pA3jDhMiqlFUSewPvwSnFjjaA7+sjulQO49HCZykyqdR1Fd5cxNKKBsjMczZfR7mop8I/NANeSZyRGmg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 y-prosemirror: ^1.2.11 - '@tiptap/extension-floating-menu@2.8.0': - resolution: {integrity: sha512-H4QT61CrkLqisnGGC7zgiYmsl2jXPHl89yQCbdlkQN7aw11H7PltcJS2PJguL0OrRVJS/Mv/VTTUiMslmsEV5g==} + '@tiptap/extension-floating-menu@2.11.3': + resolution: {integrity: sha512-Za1x475cvv+URegCsoDr8rZI5GIoC4N6rHg/xqmozY4bA326Ko1cMrUbwpVF6p17nerDGAMCIstZM7SSUQdNSA==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-gapcursor@2.8.0': - resolution: {integrity: sha512-Be1LWCmvteQInOnNVN+HTqc1XWsj1bCl+Q7et8qqNjtGtTaCbdCp8ppcH1SKJxNTM/RLUtPyJ8FDgOTj51ixCA==} + '@tiptap/extension-gapcursor@2.11.3': + resolution: {integrity: sha512-QNVoMNvsinnpvIBAADCbPXMAxY6nv38dxLY3mmPBF0j51H1ggGRX2MdD8VsSBM+AP5az9vTa1+rO+0wBfDwDWw==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-hard-break@2.8.0': - resolution: {integrity: sha512-vqiIfviNiCmy/pJTHuDSCAGL2O4QDEdDmAvGJu8oRmElUrnlg8DbJUfKvn6DWQHNSQwRb+LDrwWlzAYj1K9u6A==} + '@tiptap/extension-hard-break@2.11.3': + resolution: {integrity: sha512-Jsz1qV/h4GFZiBtcrJ2yAF1Euw25IXgx5m4EBr/33TV6gT5+zRUr4e0y6h3jHicyInviZeXd9HXELCcQCEtHRg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-history@2.8.0': - resolution: {integrity: sha512-u5YS0J5Egsxt8TUWMMAC3QhPZaak+IzQeyHch4gtqxftx96tprItY7AD/A3pGDF2uCSnN+SZrk6yVexm6EncDw==} + '@tiptap/extension-history@2.11.3': + resolution: {integrity: sha512-dxJeuGuLEn9V4iGfsvMOBcTwufcw971NoBdsyW1TOzYvucDkYHgIlOVE4DEWIVuOkfIjKEiCGl8IdZLaHWU8Sg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-horizontal-rule@2.8.0': - resolution: {integrity: sha512-Sn/MI8WVFBoIYSIHA9NJryJIyCEzZdRysau8pC5TFnfifre0QV1ksPz2bgF+DyCD69ozQiRdBBHDEwKe47ZbfQ==} + '@tiptap/extension-horizontal-rule@2.11.3': + resolution: {integrity: sha512-+O6W6EbD4TLsUF8t0ApgZWLpcwn3tajRZtBU6u0SuwHtvhMTrQYySUTH5j06KfTDbw6JAqKKPCpKhPgH2Z6eFg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-italic@2.8.0': - resolution: {integrity: sha512-PwwSE2LTYiHI47NJnsfhBmPiLE8IXZYqaSoNPU6flPrk1KxEzqvRI1joKZBmD9wuqzmHJ93VFIeZcC+kfwi8ZA==} + '@tiptap/extension-italic@2.11.3': + resolution: {integrity: sha512-GpeQh2tMb6ys/ft7xqitoXeWO7uM8z4hvLEhD92ACuk6VpcHUhksUwnv4G4Qc/cZ9i+qk3GYEsRha0JaHp3GVw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-link@2.8.0': - resolution: {integrity: sha512-p67hCG/pYCiOK/oCTPZnlkw9Ei7KJ7kCKFaluTcAmr5j8IBdYfDqSMDNCT4vGXBvKFh4X6xD7S7QvOqcH0Gn9A==} + '@tiptap/extension-link@2.11.3': + resolution: {integrity: sha512-FPLLBPqJQmqVMww7qx+Oznru2OaeoeZ6wTSfwtZZv1jNa1wwtK9O0wRJ3g71qvdFAt1veOesZNiMn3q7MOrw0A==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-paragraph@2.8.0': - resolution: {integrity: sha512-XgxxNNbuBF48rAGwv7/s6as92/xjm/lTZIGTq9aG13ClUKFtgdel7C33SpUCcxg3cO2WkEyllXVyKUiauFZw/A==} + '@tiptap/extension-paragraph@2.11.3': + resolution: {integrity: sha512-snH9aIRJGpHCLm0zzuBwhXpRYMyZvyNBlF5MulJKxkwremFhD9fVP26UtQEneL/CnwpNs3q1QOQGTRlqFP2hbg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-strike@2.8.0': - resolution: {integrity: sha512-ezkDiXxQ3ME/dDMMM7tAMkKRi6UWw7tIu+Mx7Os0z8HCGpVBk1gFhLlhEd8I5rJaPZr4tK1wtSehMA9bscFGQw==} + '@tiptap/extension-strike@2.11.3': + resolution: {integrity: sha512-Ei4rGEqytwXSj4Th1CN8EZFHnYmM5lAp8YUj1V3wWGX7EtRtnq1YG3+b7q68NKmdPSMFOjEz6pHtBzO+p+0aWw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-cell@2.8.0': - resolution: {integrity: sha512-IZpxONWyOd474L8+k4bHrFNRhbsl9eRwbNs5O877JkVFItc2WUz1DIhbJzjmBRsqExtWQJuOsiqWFab1kpiwGQ==} + '@tiptap/extension-table-cell@2.11.3': + resolution: {integrity: sha512-evdzllWjBey8bzSR7sUxTdrHKjN6M3XOv+1XfaoQpqMr8ryRWDb6yPSEIssAjc8bIa7yvCl7jaXMreeXE7oBSQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-header@2.8.0': - resolution: {integrity: sha512-B67A96yMQlG96IFzZBc7D5dnn7O29hcjuDLtjyZkKvU5D/RlFKPMmC9nVphCV3CnbkvEOZUdK9pNaOpen64naw==} + '@tiptap/extension-table-header@2.11.3': + resolution: {integrity: sha512-Dcs7R0r5VDhuRvEfLhUKFvK9Yj2xPP8aTQ2UvLVCUJMlvo5Qv/xaJWDbXxH/AQ3wL4LvZomHTOWvdNad7WEkgg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-row@2.8.0': - resolution: {integrity: sha512-Iezej6l7X+WqKzGLmCgAwmpL+QsfjFv1g8yVH5d0/3Pkcj3G9nDn+GSm4bZnbfYFyqInHG94PZ5PMReiALrJtA==} + '@tiptap/extension-table-row@2.11.3': + resolution: {integrity: sha512-ExCsW/7SFJ9geXhEBKb3eyLCvUOvfLC6pn69aua/AvXPJE4cv//5D42e6o5Iyu/xwLLPH1oAINa0HYmsFDp75w==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-text@2.8.0': - resolution: {integrity: sha512-EDAdFFzWOvQfVy7j3qkKhBpOeE5thkJaBemSWfXI93/gMVc0ZCdLi24mDvNNgUHlT+RjlIoQq908jZaaxLKN2A==} + '@tiptap/extension-text@2.11.3': + resolution: {integrity: sha512-DhrwR9tmDU2U4yjqdaX6odrnOYaE/Ai2ERs2bU4Sgm0ZF5QCyO31Cflg1OQ4erTi0IiqD5ilDPRXqFuu6FGzOQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-underline@2.8.0': - resolution: {integrity: sha512-1ouuHwZJphT8OosAmp6x8e+Wly3cUd1pNWBiOutJX+6QRGBXJnIKFCzn8YOTlWhg1YQigisG7dNF3YdlyuRNHw==} + '@tiptap/extension-underline@2.11.3': + resolution: {integrity: sha512-OPVG+D6byOn7mLTOwYVCIQL6j32SlYgic+Ku3km4qadynfqhHcALpmhMkWXcrlA7S9R7aIP2s5XW73dV//XCyQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/pm@2.10.3': - resolution: {integrity: sha512-771p53aU0KFvujvKpngvq2uAxThlEsjYaXcVVmwrhf0vxSSg+psKQEvqvWvHv/3BwkPVCGwmEKNVJZjaXFKu4g==} + '@tiptap/pm@2.11.3': + resolution: {integrity: sha512-AEpiWvYmXdELpuGGhX6lS2aU155ANwS7WbQ/+/SFqH3YIYHjgUzP8UnY6KSiEBI7a7kX4TWhG84mWrzPA3dPaw==} - '@tiptap/react@2.8.0': - resolution: {integrity: sha512-o/aSCjO5Nu4MsNpTF+N1SzYzVQvvBiclmTOZX2E6usZ8jre5zmKfXHDSZnjGSRTK6z6kw5KW8wpjRQha03f9mg==} + '@tiptap/react@2.11.3': + resolution: {integrity: sha512-tNY/xJ7swV1Ffc6W5CSEWJnBo3grDapkZnd2udSTJ7/zYMUe+vSN2bcdKga2Zo2rAC0WFuLUl27iUhrZ29FFuQ==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -4412,8 +4203,8 @@ packages: '@types/docker-modem@3.0.6': resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} - '@types/dockerode@3.3.33': - resolution: {integrity: sha512-7av8lVOhkW7Xd11aZTSq5zhdpyNraldXwQR0pxUCiSNTvIzsP86KrFrmrZgxtrXD2Zrtzwt4H6OYLbATONWzWg==} + '@types/dockerode@3.3.34': + resolution: {integrity: sha512-mH9SuIb8NuTDsMus5epcbTzSbEo52fKLBMo0zapzYIAIyfDqoIFn7L3trekHLKC8qmxGV++pPUP4YqQ9n5v2Zg==} '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} @@ -4508,14 +4299,11 @@ packages: '@types/node@10.14.22': resolution: {integrity: sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==} - '@types/node@18.19.70': - resolution: {integrity: sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==} - - '@types/node@18.19.71': - resolution: {integrity: sha512-evXpcgtZm8FY4jqBSN8+DmOTcVkkvTmAayeo4Wf3m1xAruyVGzGuDh/Fb/WWX2yLItUiho42ozyJjB0dw//Tkw==} + '@types/node@18.19.74': + resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==} - '@types/node@22.10.2': - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.7': + resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -4621,8 +4409,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.19.1': - resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} + '@typescript-eslint/eslint-plugin@8.20.0': + resolution: {integrity: sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -4635,8 +4423,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/parser@8.19.1': - resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} + '@typescript-eslint/parser@8.20.0': + resolution: {integrity: sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4646,12 +4434,12 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@8.19.1': - resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} + '@typescript-eslint/scope-manager@8.20.0': + resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.19.1': - resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} + '@typescript-eslint/type-utils@8.20.0': + resolution: {integrity: sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4661,8 +4449,8 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@8.19.1': - resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} + '@typescript-eslint/types@8.20.0': + resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -4674,8 +4462,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.19.1': - resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} + '@typescript-eslint/typescript-estree@8.20.0': + resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' @@ -4686,8 +4474,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.19.1': - resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} + '@typescript-eslint/utils@8.20.0': + resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4697,12 +4485,12 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@8.19.1': - resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} + '@typescript-eslint/visitor-keys@8.20.0': + resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -4837,14 +4625,14 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@2.1.8': - resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} + '@vitest/expect@3.0.4': + resolution: {integrity: sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==} - '@vitest/mocker@2.1.8': - resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} + '@vitest/mocker@3.0.4': + resolution: {integrity: sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 peerDependenciesMeta: msw: optional: true @@ -4857,17 +4645,20 @@ packages: '@vitest/pretty-format@2.1.8': resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} - '@vitest/runner@2.1.8': - resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} + '@vitest/pretty-format@3.0.4': + resolution: {integrity: sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==} - '@vitest/snapshot@2.1.8': - resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} + '@vitest/runner@3.0.4': + resolution: {integrity: sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==} + + '@vitest/snapshot@3.0.4': + resolution: {integrity: sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@2.1.8': - resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} + '@vitest/spy@3.0.4': + resolution: {integrity: sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} @@ -4875,6 +4666,9 @@ packages: '@vitest/utils@2.1.8': resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} + '@vitest/utils@3.0.4': + resolution: {integrity: sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==} + '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -6013,12 +5807,12 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - docker-modem@5.0.3: - resolution: {integrity: sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==} + docker-modem@5.0.5: + resolution: {integrity: sha512-Cxw8uEcvNTRmsQuGqzzfiCnfGgf96tVJItLh8taOX0miTcIBALKH5TckCSuZbpbjP7uhAl81dOL9sxfa6HgCIg==} engines: {node: '>= 8.0'} - dockerode@4.0.2: - resolution: {integrity: sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==} + dockerode@4.0.3: + resolution: {integrity: sha512-QSXJFcBQNaGZO6U3qWW4B7p8yRIJn/dWmvL2AQWfO/bjptBBO6QYdVkYSYFz9qoivP2jsOHZfmXMAfrK0BMKyg==} engines: {node: '>= 8.0'} doctrine@2.1.0: @@ -6169,11 +5963,11 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} es-set-tostringtag@2.0.3: @@ -6192,11 +5986,6 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -6286,8 +6075,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + eslint-plugin-prettier@5.2.2: + resolution: {integrity: sha512-1yI3/hf35wmlq66C8yOyrujQnel+v5l1Vop5Cl2I6ylyNTT1JbuUUnV3/41PzwTzcyDp/oF0jWE3HXvcH5AQOQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -6689,6 +6478,10 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -6874,8 +6667,8 @@ packages: hast-util-to-html@8.0.4: resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} hast-util-to-mdast@8.4.1: resolution: {integrity: sha512-tfmBLASuCgyhCzpkTXM5kU8xeuS5jkMZ17BYm2YftGT5wvgc7uHXTZ/X8WfNd6F5NV/IGmrLsuahZ+jXQir4zQ==} @@ -7083,8 +6876,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} is-array-buffer@3.0.5: @@ -7164,8 +6957,8 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -7565,8 +7358,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lib0@0.2.98: - resolution: {integrity: sha512-XteTiNO0qEXqqweWx+b21p/fBnNHUA1NwAtJNJek1oPrewEZs2uiT4gWivHKr9GqCjDPAhchz0UQO8NwU3bBNA==} + lib0@0.2.99: + resolution: {integrity: sha512-vwztYuUf1uf/1zQxfzRfO5yzfNKhTtgOByCruuiQQxWQXnPb8Itaube5ylofcV0oM0aKal9Mv+S1s1Ky0UYP1w==} engines: {node: '>=16'} hasBin: true @@ -7580,8 +7373,8 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - linkifyjs@4.1.3: - resolution: {integrity: sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg==} + linkifyjs@4.2.0: + resolution: {integrity: sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==} lint-staged@15.3.0: resolution: {integrity: sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==} @@ -7692,6 +7485,9 @@ packages: resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} engines: {node: '>= 12.0.0'} + long@5.2.4: + resolution: {integrity: sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -7728,8 +7524,8 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} - magic-string@0.30.14: - resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -7753,8 +7549,8 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true - markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} math-expression-evaluator@1.4.0: resolution: {integrity: sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==} @@ -8088,8 +7884,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -8118,8 +7914,8 @@ packages: fp-ts: ^2.0.0 monocle-ts: ^2.0.0 - node-abi@3.71.0: - resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + node-abi@3.73.0: + resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} engines: {node: '>=10'} node-addon-api@7.1.1: @@ -8255,8 +8051,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.4.1: - resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -8422,8 +8218,8 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} @@ -8527,10 +8323,6 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.1: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} @@ -8574,8 +8366,8 @@ packages: resolution: {integrity: sha512-uE4AiIqhjtHKp4pj9ei7fkdfNXEX9IqDBlK1plGAQne6y79UUlrTdtYLhwXoO0AMOvqyl9Ar+BU6Eo6P/MPgfg==} engines: {node: '>= 16'} - prebuild-install@7.1.2: - resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} hasBin: true @@ -8686,8 +8478,8 @@ packages: prosemirror-menu@1.2.4: resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} - prosemirror-model@1.24.0: - resolution: {integrity: sha512-Ft7epNnycoQSM+2ObF35SBbBX+5WY39v8amVlrtlAcpglhlHs2tCTnWl7RX5tbp/PsMKcRcWV9cXPuoBWq0AIQ==} + prosemirror-model@1.24.1: + resolution: {integrity: sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==} prosemirror-schema-basic@1.2.3: resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} @@ -8698,8 +8490,8 @@ packages: prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} - prosemirror-tables@1.6.1: - resolution: {integrity: sha512-p8WRJNA96jaNQjhJolmbxTzd6M4huRE5xQ8OxjvMhQUP0Nzpo4zz6TztEiwk6aoqGBhz9lxRWR1yRZLlpQN98w==} + prosemirror-tables@1.6.2: + resolution: {integrity: sha512-97dKocVLrEVTQjZ4GBLdrrMw7Gv3no8H8yMwf5IRM9OoHrzbWpcH5jJxYgNQIRCtdIqwDctT1HdMHrGTiwp1dQ==} prosemirror-trailing-node@3.0.0: resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} @@ -8711,8 +8503,12 @@ packages: prosemirror-transform@1.10.2: resolution: {integrity: sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==} - prosemirror-view@1.37.0: - resolution: {integrity: sha512-z2nkKI1sJzyi7T47Ji/ewBPuIma1RNvQCCYVdV+MqWBV7o4Sa1n94UJCJJ1aQRF/xRkFfyqLGlGFWitIcCOtbg==} + prosemirror-view@1.37.2: + resolution: {integrity: sha512-ApcyrfV/cRcaL65on7TQcfWElwLyOgIjnIynfAuV+fIdlpbSvSWRwfuPaH7T5mo4AbO/FID29qOtjiDIKGWyog==} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} protocol-buffers-schema@3.6.0: resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} @@ -8951,8 +8747,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-icons@5.3.0: - resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + react-icons@5.4.0: + resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} peerDependencies: react: '*' @@ -8965,32 +8761,32 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} - react-number-format@5.4.2: - resolution: {integrity: sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==} + react-number-format@5.4.3: + resolution: {integrity: sha512-VCY5hFg/soBighAoGcdE+GagkJq0230qN6jcS5sp8wQX1qy1fYN/RX7/BXkrs0oyzzwqR8/+eSUrqXbGeywdUQ==} peerDependencies: - react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - react-remove-scroll@2.6.0: - resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -9019,21 +8815,21 @@ packages: react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-style-singleton@2.2.1: - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - react-textarea-autosize@8.5.3: - resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} + react-textarea-autosize@8.5.6: + resolution: {integrity: sha512-aT3ioKXMa8f6zHYGebhbdMD2L00tKeRX1zuVuDx9YQK/JLLRSaSxq3ugECEmUB9z2kvk6bFSIoRHLkkUv0RJiw==} engines: {node: '>=10'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-toc@3.1.0: resolution: {integrity: sha512-JPvMScVqu8NuguplaM74lerkXVh4ASnnF6vrjUoHS0fTxOsNrLJEagwdfTXopY3iBMAuOFx9pOwuRYi8UfL4wQ==} @@ -9121,14 +8917,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@4.2.1: - resolution: {integrity: sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.0.1: - resolution: {integrity: sha512-gIS00E8eHNWONxofNKOhtlkwBQj/K39ZJamnvMEFH3pNKc06Zz2jtFXF/4ldAaJTzQNhMJU7b5+C7tTq2ukV7Q==} + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} regexp.prototype.flags@1.5.3: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} @@ -9268,11 +9064,6 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.28.1: - resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.31.0: resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -9403,8 +9194,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.23.1: - resolution: {integrity: sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==} + shiki@1.29.1: + resolution: {integrity: sha512-TghWKV9pJTd/N+IgAIVJtr0qZkB7FfFCUrrEJc0aRmZupo3D1OCVRknQWVRVA7AX/M0Ld7QfoAruPzr3CnUJuw==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -9552,8 +9343,8 @@ packages: resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} engines: {node: '>=0.10.0'} - storybook@8.4.7: - resolution: {integrity: sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==} + storybook@8.5.0: + resolution: {integrity: sha512-cEx42OlCetManF+cONVJVYP7SYsnI2K922DfWKmZhebP0it0n6TUof4y5/XzJ8YUruwPgyclGLdX8TvdRuNSfw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -9721,6 +9512,9 @@ packages: tar-fs@2.0.1: resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@3.0.6: resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} @@ -9777,8 +9571,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} @@ -9788,6 +9582,10 @@ packages: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} @@ -9799,11 +9597,11 @@ packages: resolution: {integrity: sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==} hasBin: true - tldts-core@6.1.61: - resolution: {integrity: sha512-In7VffkDWUPgwa+c9picLUxvb0RltVwTkSgMNFgvlGSWveCzGBemBqTsgJCL4EDFWZ6WH0fKTsot6yNhzy3ZzQ==} + tldts-core@6.1.74: + resolution: {integrity: sha512-gTwtY6L2GfuxiL4CWpLknv9JDYYqBvKCk/BT5uAaAvCA0s6pzX7lr2IrkQZSUlnSjRHIjTl8ZwKCVXJ7XNRWYw==} - tldts@6.1.61: - resolution: {integrity: sha512-rv8LUyez4Ygkopqn+M6OLItAOT9FF3REpPQDkdMx5ix8w4qkuE7Vo2o/vw1nxKQYmJDV8JpAMJQr1b+lTKf0FA==} + tldts@6.1.74: + resolution: {integrity: sha512-O5vTZ1UmmEmrLl/59U9igitnSMlprALLaLgbv//dEvjobPT9vyURhHXKMCDLEhn3qxZFIkb9PwAfNYV0Ol7RPQ==} hasBin: true to-no-case@1.0.2: @@ -9843,8 +9641,8 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + tough-cookie@5.1.0: + resolution: {integrity: sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==} engines: {node: '>=16'} tr46@0.0.3: @@ -9962,8 +9760,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + type-fest@4.33.0: + resolution: {integrity: sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==} engines: {node: '>=16'} type-is@1.6.18: @@ -10053,8 +9851,8 @@ packages: typeorm-aurora-data-api-driver: optional: true - typescript-eslint@8.19.1: - resolution: {integrity: sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==} + typescript-eslint@8.20.0: + resolution: {integrity: sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10148,8 +9946,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin@1.16.0: - resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} unzipper@0.10.14: @@ -10179,45 +9977,49 @@ packages: re2: optional: true - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - use-composed-ref@1.3.0: - resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} + use-composed-ref@1.4.0: + resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true - use-isomorphic-layout-effect@1.1.2: - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + use-isomorphic-layout-effect@1.2.0: + resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - use-latest@1.2.1: - resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} + use-latest@1.3.0: + resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} peerDependencies: '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - use-sidecar@1.1.2: - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -10227,10 +10029,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -10301,9 +10103,9 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@2.1.8: - resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@3.0.4: + resolution: {integrity: sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite-plugin-css-injected-by-js@3.5.2: @@ -10322,39 +10124,8 @@ packages: vite: optional: true - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@6.0.9: - resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==} + vite@6.0.11: + resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -10399,20 +10170,23 @@ packages: typescript: 3.x || 4.x || 5.x vitest: '>=2.0.0' - vitest@2.1.8: - resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.0.4: + resolution: {integrity: sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.8 - '@vitest/ui': 2.1.8 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.4 + '@vitest/ui': 3.0.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true '@vitest/browser': @@ -10654,8 +10428,8 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yjs@13.6.19: - resolution: {integrity: sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw==} + yjs@13.6.23: + resolution: {integrity: sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} yocto-queue@0.1.0: @@ -10718,7 +10492,7 @@ snapshots: '@anthropic-ai/sdk@0.27.3': dependencies: - '@types/node': 18.19.71 + '@types/node': 18.19.74 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -10739,21 +10513,21 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.731.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.731.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-locate-window': 3.568.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-locate-window': 3.723.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -10762,15 +10536,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-locate-window': 3.568.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-locate-window': 3.723.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.731.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -10779,497 +10553,536 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.731.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.726.1': + '@aws-sdk/client-s3@3.732.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/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) - '@aws-sdk/client-sts': 3.726.1 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) - '@aws-sdk/middleware-bucket-endpoint': 3.726.0 - '@aws-sdk/middleware-expect-continue': 3.723.0 - '@aws-sdk/middleware-flexible-checksums': 3.723.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.723.0 - '@aws-sdk/middleware-ssec': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.726.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/signature-v4-multi-region': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.726.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/credential-provider-node': 3.731.1 + '@aws-sdk/middleware-bucket-endpoint': 3.731.0 + '@aws-sdk/middleware-expect-continue': 3.731.0 + '@aws-sdk/middleware-flexible-checksums': 3.732.0 + '@aws-sdk/middleware-host-header': 3.731.0 + '@aws-sdk/middleware-location-constraint': 3.731.0 + '@aws-sdk/middleware-logger': 3.731.0 + '@aws-sdk/middleware-recursion-detection': 3.731.0 + '@aws-sdk/middleware-sdk-s3': 3.731.0 + '@aws-sdk/middleware-ssec': 3.731.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/region-config-resolver': 3.731.0 + '@aws-sdk/signature-v4-multi-region': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@aws-sdk/util-user-agent-browser': 3.731.0 + '@aws-sdk/util-user-agent-node': 3.731.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/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.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-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.0 + '@smithy/util-waiter': 4.0.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)': + '@aws-sdk/client-sso-oidc@3.731.1': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.726.1 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) - '@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.726.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.726.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 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/credential-provider-node': 3.731.1 + '@aws-sdk/middleware-host-header': 3.731.0 + '@aws-sdk/middleware-logger': 3.731.0 + '@aws-sdk/middleware-recursion-detection': 3.731.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/region-config-resolver': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@aws-sdk/util-user-agent-browser': 3.731.0 + '@aws-sdk/util-user-agent-node': 3.731.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.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-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.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.726.0': + '@aws-sdk/client-sso@3.731.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.723.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.726.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.726.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 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/middleware-host-header': 3.731.0 + '@aws-sdk/middleware-logger': 3.731.0 + '@aws-sdk/middleware-recursion-detection': 3.731.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/region-config-resolver': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@aws-sdk/util-user-agent-browser': 3.731.0 + '@aws-sdk/util-user-agent-node': 3.731.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.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-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.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.726.1': + '@aws-sdk/client-sts@3.731.1': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) - '@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.726.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.726.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 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/credential-provider-node': 3.731.1 + '@aws-sdk/middleware-host-header': 3.731.0 + '@aws-sdk/middleware-logger': 3.731.0 + '@aws-sdk/middleware-recursion-detection': 3.731.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/region-config-resolver': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@aws-sdk/util-user-agent-browser': 3.731.0 + '@aws-sdk/util-user-agent-node': 3.731.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.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-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.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.723.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 + '@aws-sdk/core@3.731.0': + dependencies: + '@aws-sdk/types': 3.731.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.8.1 - '@aws-sdk/credential-provider-env@3.723.0': + '@aws-sdk/credential-provider-env@3.731.0': dependencies: - '@aws-sdk/core': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.723.0': - dependencies: - '@aws-sdk/core': 3.723.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 + '@aws-sdk/credential-provider-http@3.731.0': + dependencies: + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.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.8.1 - '@aws-sdk/credential-provider-ini@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)': - dependencies: - '@aws-sdk/client-sts': 3.726.1 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-env': 3.723.0 - '@aws-sdk/credential-provider-http': 3.723.0 - '@aws-sdk/credential-provider-process': 3.723.0 - '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) - '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1) - '@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 + '@aws-sdk/credential-provider-ini@3.731.1': + dependencies: + '@aws-sdk/core': 3.731.0 + '@aws-sdk/credential-provider-env': 3.731.0 + '@aws-sdk/credential-provider-http': 3.731.0 + '@aws-sdk/credential-provider-process': 3.731.0 + '@aws-sdk/credential-provider-sso': 3.731.1 + '@aws-sdk/credential-provider-web-identity': 3.731.1 + '@aws-sdk/nested-clients': 3.731.1 + '@aws-sdk/types': 3.731.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.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)': - dependencies: - '@aws-sdk/credential-provider-env': 3.723.0 - '@aws-sdk/credential-provider-http': 3.723.0 - '@aws-sdk/credential-provider-ini': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) - '@aws-sdk/credential-provider-process': 3.723.0 - '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) - '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1) - '@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 + '@aws-sdk/credential-provider-node@3.731.1': + dependencies: + '@aws-sdk/credential-provider-env': 3.731.0 + '@aws-sdk/credential-provider-http': 3.731.0 + '@aws-sdk/credential-provider-ini': 3.731.1 + '@aws-sdk/credential-provider-process': 3.731.0 + '@aws-sdk/credential-provider-sso': 3.731.1 + '@aws-sdk/credential-provider-web-identity': 3.731.1 + '@aws-sdk/types': 3.731.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.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.723.0': + '@aws-sdk/credential-provider-process@3.731.0': dependencies: - '@aws-sdk/core': 3.723.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 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))': + '@aws-sdk/credential-provider-sso@3.731.1': dependencies: - '@aws-sdk/client-sso': 3.726.0 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/token-providers': 3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)) - '@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 + '@aws-sdk/client-sso': 3.731.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/token-providers': 3.731.1 + '@aws-sdk/types': 3.731.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.723.0(@aws-sdk/client-sts@3.726.1)': + '@aws-sdk/credential-provider-web-identity@3.731.1': dependencies: - '@aws-sdk/client-sts': 3.726.1 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/nested-clients': 3.731.1 + '@aws-sdk/types': 3.731.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt - '@aws-sdk/lib-storage@3.726.1(@aws-sdk/client-s3@3.726.1)': + '@aws-sdk/lib-storage@3.732.0(@aws-sdk/client-s3@3.732.0)': dependencies: - '@aws-sdk/client-s3': 3.726.1 - '@smithy/abort-controller': 4.0.0 - '@smithy/middleware-endpoint': 4.0.0 - '@smithy/smithy-client': 4.0.0 + '@aws-sdk/client-s3': 3.732.0 + '@smithy/abort-controller': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/smithy-client': 4.1.2 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-bucket-endpoint@3.726.0': + '@aws-sdk/middleware-bucket-endpoint@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.731.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/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.8.1 - '@aws-sdk/middleware-expect-continue@3.723.0': + '@aws-sdk/middleware-expect-continue@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.723.0': + '@aws-sdk/middleware-flexible-checksums@3.732.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.723.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.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/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.8.1 - '@aws-sdk/middleware-host-header@3.723.0': + '@aws-sdk/middleware-host-header@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.723.0': + '@aws-sdk/middleware-location-constraint@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.723.0': + '@aws-sdk/middleware-logger@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.723.0': + '@aws-sdk/middleware-recursion-detection@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.723.0': + '@aws-sdk/middleware-sdk-s3@3.731.0': dependencies: - '@aws-sdk/core': 3.723.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.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/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.0 - '@smithy/util-stream': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.0.2 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.723.0': + '@aws-sdk/middleware-ssec@3.731.0': + dependencies: + '@aws-sdk/types': 3.731.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/types': 4.0.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@smithy/core': 3.1.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.726.0': + '@aws-sdk/nested-clients@3.731.1': dependencies: - '@aws-sdk/core': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@smithy/core': 3.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.731.0 + '@aws-sdk/middleware-host-header': 3.731.0 + '@aws-sdk/middleware-logger': 3.731.0 + '@aws-sdk/middleware-recursion-detection': 3.731.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/region-config-resolver': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-endpoints': 3.731.0 + '@aws-sdk/util-user-agent-browser': 3.731.0 + '@aws-sdk/util-user-agent-node': 3.731.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.8.1 + transitivePeerDependencies: + - aws-crt - '@aws-sdk/region-config-resolver@3.723.0': + '@aws-sdk/region-config-resolver@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/node-config-provider': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.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.0 + '@smithy/util-middleware': 4.0.1 tslib: 2.8.1 - '@aws-sdk/s3-request-presigner@3.726.1': + '@aws-sdk/s3-request-presigner@3.732.0': dependencies: - '@aws-sdk/signature-v4-multi-region': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-format-url': 3.723.0 - '@smithy/middleware-endpoint': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/smithy-client': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/signature-v4-multi-region': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@aws-sdk/util-format-url': 3.731.0 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.723.0': + '@aws-sdk/signature-v4-multi-region@3.731.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/signature-v4': 5.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/middleware-sdk-s3': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))': + '@aws-sdk/token-providers@3.731.1': dependencies: - '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1) - '@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 + '@aws-sdk/nested-clients': 3.731.1 + '@aws-sdk/types': 3.731.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt - '@aws-sdk/types@3.723.0': + '@aws-sdk/types@3.731.0': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.723.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.726.0': + '@aws-sdk/util-endpoints@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/types': 4.0.0 - '@smithy/util-endpoints': 3.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/types': 4.1.0 + '@smithy/util-endpoints': 3.0.1 tslib: 2.8.1 - '@aws-sdk/util-format-url@3.723.0': + '@aws-sdk/util-format-url@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/querystring-builder': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.568.0': + '@aws-sdk/util-locate-window@3.723.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.723.0': + '@aws-sdk/util-user-agent-browser@3.731.0': dependencies: - '@aws-sdk/types': 3.723.0 - '@smithy/types': 4.0.0 + '@aws-sdk/types': 3.731.0 + '@smithy/types': 4.1.0 bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.726.0': + '@aws-sdk/util-user-agent-node@3.731.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.726.0 - '@aws-sdk/types': 3.723.0 - '@smithy/node-config-provider': 4.0.0 - '@smithy/types': 4.0.0 + '@aws-sdk/middleware-user-agent': 3.731.0 + '@aws-sdk/types': 3.731.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@aws-sdk/xml-builder@3.723.0': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@babel/code-frame@7.26.2': @@ -11390,37 +11203,37 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@blocknote/core@0.22.0(@types/hast@3.0.4)': + '@blocknote/core@0.23.0(@types/hast@3.0.4)': dependencies: '@emoji-mart/data': 1.2.1 - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/extension-bold': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-code': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-collaboration': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)(y-prosemirror@1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)) - '@tiptap/extension-collaboration-cursor': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(y-prosemirror@1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)) - '@tiptap/extension-gapcursor': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/extension-hard-break': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-history': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/extension-horizontal-rule': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/extension-italic': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-link': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/extension-paragraph': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-strike': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-table-cell': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-table-header': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-table-row': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-text': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/extension-underline': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3)) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/extension-bold': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-code': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-collaboration': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)(y-prosemirror@1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23)) + '@tiptap/extension-collaboration-cursor': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(y-prosemirror@1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23)) + '@tiptap/extension-gapcursor': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/extension-hard-break': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-history': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/extension-horizontal-rule': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/extension-italic': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-link': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/extension-paragraph': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-strike': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-table-cell': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-table-header': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-table-row': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-text': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/extension-underline': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3)) + '@tiptap/pm': 2.11.3 emoji-mart: 5.6.0 hast-util-from-dom: 4.2.0 prosemirror-dropcursor: 1.8.1 - prosemirror-highlight: 0.9.0(@types/hast@3.0.4)(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.2)(prosemirror-view@1.37.0)(shiki@1.23.1) - prosemirror-model: 1.24.0 + prosemirror-highlight: 0.9.0(@types/hast@3.0.4)(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.2)(prosemirror-view@1.37.2)(shiki@1.29.1) + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-tables: 1.6.1 + prosemirror-tables: 1.6.2 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 rehype-format: 5.0.1 rehype-parse: 8.0.5 rehype-remark: 9.1.2 @@ -11429,12 +11242,12 @@ snapshots: remark-parse: 10.0.2 remark-rehype: 10.1.0 remark-stringify: 10.0.3 - shiki: 1.23.1 + shiki: 1.29.1 unified: 10.1.2 uuid: 8.3.2 - y-prosemirror: 1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) - y-protocols: 1.0.6(yjs@13.6.19) - yjs: 13.6.19 + y-prosemirror: 1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23) + y-protocols: 1.0.6(yjs@13.6.23) + yjs: 13.6.23 transitivePeerDependencies: - '@types/hast' - highlight.js @@ -11443,16 +11256,16 @@ snapshots: - sugar-high - supports-color - '@blocknote/mantine@0.22.0(@tiptap/pm@2.10.3)(@types/hast@3.0.4)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@blocknote/mantine@0.23.0(@tiptap/pm@2.11.3)(@types/hast@3.0.4)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@blocknote/core': 0.22.0(@types/hast@3.0.4) - '@blocknote/react': 0.22.0(@tiptap/pm@2.10.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/core': 7.13.2(@mantine/hooks@7.13.2(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@blocknote/core': 0.23.0(@types/hast@3.0.4) + '@blocknote/react': 0.23.0(@tiptap/pm@2.11.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.16.1(@mantine/hooks@7.16.1(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/hooks': 7.16.1(react@18.3.1) '@mantine/utils': 6.0.22(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-icons: 5.3.0(react@18.3.1) + react-icons: 5.4.0(react@18.3.1) transitivePeerDependencies: - '@tiptap/pm' - '@types/hast' @@ -11463,16 +11276,16 @@ snapshots: - sugar-high - supports-color - '@blocknote/react@0.22.0(@tiptap/pm@2.10.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@blocknote/react@0.23.0(@tiptap/pm@2.11.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@blocknote/core': 0.22.0(@types/hast@3.0.4) - '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/react': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@blocknote/core': 0.23.0(@types/hast@3.0.4) + '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/react': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lodash.merge: 4.6.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-icons: 5.3.0(react@18.3.1) + react-icons: 5.4.0(react@18.3.1) transitivePeerDependencies: - '@tiptap/pm' - '@types/hast' @@ -11482,18 +11295,18 @@ snapshots: - sugar-high - supports-color - '@blocknote/server-util@0.22.0(@types/hast@3.0.4)(canvas@2.11.2)(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@blocknote/server-util@0.23.0(@types/hast@3.0.4)(canvas@2.11.2)(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@blocknote/core': 0.22.0(@types/hast@3.0.4) - '@blocknote/react': 0.22.0(@tiptap/pm@2.10.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@blocknote/core': 0.23.0(@types/hast@3.0.4) + '@blocknote/react': 0.23.0(@tiptap/pm@2.11.3)(@types/hast@3.0.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 jsdom: 25.0.1(canvas@2.11.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - y-prosemirror: 1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) - y-protocols: 1.0.6(yjs@13.6.19) - yjs: 13.6.19 + y-prosemirror: 1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23) + y-protocols: 1.0.6(yjs@13.6.23) + yjs: 13.6.23 transitivePeerDependencies: - '@types/hast' - bufferutil @@ -11510,7 +11323,7 @@ snapshots: '@browserbasehq/sdk@2.0.0': dependencies: - '@types/node': 18.19.71 + '@types/node': 18.19.74 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -11586,14 +11399,14 @@ snapshots: '@colors/colors@1.6.0': {} - '@commitlint/cli@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': + '@commitlint/cli@19.6.1(@types/node@22.10.7)(typescript@5.7.2)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.6.0 - '@commitlint/load': 19.6.1(@types/node@22.10.2)(typescript@5.7.2) + '@commitlint/load': 19.6.1(@types/node@22.10.7)(typescript@5.7.2) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 - tinyexec: 0.3.1 + tinyexec: 0.3.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -11637,7 +11450,7 @@ snapshots: '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': + '@commitlint/load@19.6.1(@types/node@22.10.7)(typescript@5.7.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -11645,7 +11458,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.7.2) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -11667,7 +11480,7 @@ snapshots: '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 - tinyexec: 0.3.1 + tinyexec: 0.3.2 '@commitlint/resolve-extends@19.5.0': dependencies: @@ -11870,153 +11683,102 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.23.1': optional: true '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.23.1': optional: true '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.23.1': optional: true '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.23.1': optional: true '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.23.1': optional: true '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.23.1': optional: true '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.23.1': optional: true '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.23.1': optional: true '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.23.1': optional: true '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.23.1': optional: true '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.23.1': optional: true '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.23.1': optional: true '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.23.1': optional: true '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.23.1': optional: true '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.23.1': optional: true '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.23.1': optional: true '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.23.1': optional: true @@ -12026,9 +11788,6 @@ snapshots: '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.23.1': optional: true @@ -12041,45 +11800,30 @@ snapshots: '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.23.1': optional: true '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.23.1': optional: true '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.23.1': optional: true '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.23.1': optional: true '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.23.1': optional: true @@ -12145,30 +11889,30 @@ snapshots: lodash.isundefined: 3.0.1 lodash.uniq: 4.5.0 - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.11': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.11 + '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} '@fortawesome/fontawesome-common-types@6.7.1': {} @@ -12196,6 +11940,18 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 + '@grpc/grpc-js@1.12.5': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.4 + protobufjs: 7.4.0 + yargs: 17.7.2 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -12211,7 +11967,7 @@ snapshots: '@ibm-cloud/watsonx-ai@1.3.0': dependencies: - '@types/node': 18.19.71 + '@types/node': 18.19.74 extend: 3.0.2 ibm-cloud-sdk-core: 5.1.0 transitivePeerDependencies: @@ -12305,11 +12061,11 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.2) - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) optionalDependencies: typescript: 5.7.2 @@ -12336,6 +12092,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@js-sdsl/ordered-map@4.4.2': {} + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: jsep: 1.4.0 @@ -12346,10 +12104,10 @@ snapshots: '@jsonquerylang/jsonquery@4.0.0': {} - '@langchain/anthropic@0.3.8(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1)))': + '@langchain/anthropic@0.3.8(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1)))': dependencies: '@anthropic-ai/sdk': 0.27.3 - '@langchain/core': 0.3.29(openai@4.78.1(zod@3.24.1)) + '@langchain/core': 0.3.30(openai@4.78.1(zod@3.24.1)) fast-xml-parser: 4.5.1 zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) @@ -12357,18 +12115,18 @@ snapshots: - encoding optional: true - '@langchain/community@0.3.24(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-s3@3.726.1)(@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1))(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.5.0(@playwright/test@1.49.0)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.78.1(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/anthropic@0.3.8(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1)))(@smithy/util-utf8@2.3.0)(axios@1.7.9)(cheerio@1.0.0)(fast-xml-parser@4.5.1)(handlebars@4.7.8)(ibm-cloud-sdk-core@5.1.0)(ignore@5.3.2)(ioredis@5.4.2)(jsdom@26.0.0(canvas@3.0.1))(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.78.1(zod@3.24.1))(pdf-parse@1.1.1)(pg@8.13.1)(playwright@1.49.0)(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1))(ws@8.18.0)': + '@langchain/community@0.3.24(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-s3@3.732.0)(@aws-sdk/credential-provider-node@3.731.1)(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.5.0(@playwright/test@1.49.0)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.78.1(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/anthropic@0.3.8(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1)))(@smithy/util-utf8@2.3.0)(axios@1.7.9)(cheerio@1.0.0)(fast-xml-parser@4.5.1)(handlebars@4.7.8)(ibm-cloud-sdk-core@5.1.0)(ignore@5.3.2)(ioredis@5.4.2)(jsdom@26.0.0(canvas@3.0.1))(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.78.1(zod@3.24.1))(pdf-parse@1.1.1)(pg@8.13.1)(playwright@1.49.0)(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1))(ws@8.18.0)': dependencies: '@browserbasehq/stagehand': 1.5.0(@playwright/test@1.49.0)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.78.1(zod@3.24.1))(zod@3.24.1) '@ibm-cloud/watsonx-ai': 1.3.0 - '@langchain/core': 0.3.29(openai@4.78.1(zod@3.24.1)) - '@langchain/openai': 0.3.17(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))) + '@langchain/core': 0.3.30(openai@4.78.1(zod@3.24.1)) + '@langchain/openai': 0.3.17(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))) binary-extensions: 2.3.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.1.0 js-yaml: 4.1.0 - langchain: 0.3.11(@langchain/anthropic@0.3.8(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.78.1(zod@3.24.1))(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1)) + langchain: 0.3.11(@langchain/anthropic@0.3.8(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.78.1(zod@3.24.1))(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1)) langsmith: 0.2.11(openai@4.78.1(zod@3.24.1)) openai: 4.78.1(zod@3.24.1) uuid: 10.0.0 @@ -12376,8 +12134,8 @@ snapshots: zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-s3': 3.726.1 - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1) + '@aws-sdk/client-s3': 3.732.0 + '@aws-sdk/credential-provider-node': 3.731.1 '@browserbasehq/sdk': 2.0.0 '@smithy/util-utf8': 2.3.0 cheerio: 1.0.0 @@ -12424,7 +12182,7 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))': + '@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))': dependencies: '@cfworker/json-schema': 4.0.3 ansi-styles: 5.2.0 @@ -12441,9 +12199,9 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/openai@0.3.17(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1)))': + '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.29(openai@4.78.1(zod@3.24.1)) + '@langchain/core': 0.3.30(openai@4.78.1(zod@3.24.1)) js-tiktoken: 1.0.15 openai: 4.78.1(zod@3.24.1) zod: 3.24.1 @@ -12476,21 +12234,21 @@ snapshots: '@lifeomic/attempt@3.1.0': {} - '@mantine/core@7.13.2(@mantine/hooks@7.13.2(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/core@7.16.1(@mantine/hooks@7.16.1(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/hooks': 7.16.1(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-number-format: 5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-remove-scroll: 2.6.0(@types/react@18.3.18)(react@18.3.1) - react-textarea-autosize: 8.5.3(@types/react@18.3.18)(react@18.3.1) - type-fest: 4.26.1 + react-number-format: 5.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + react-textarea-autosize: 8.5.6(@types/react@18.3.18)(react@18.3.1) + type-fest: 4.33.0 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.13.2(react@18.3.1)': + '@mantine/hooks@7.16.1(react@18.3.1)': dependencies: react: 18.3.1 @@ -12652,13 +12410,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - '@mui/x-data-grid@7.23.6(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/x-data-grid@7.24.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 '@mui/material': 5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/system': 5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@mui/utils': 6.3.1(@types/react@18.3.18)(react@18.3.1) - '@mui/x-internals': 7.23.6(@types/react@18.3.18)(react@18.3.1) + '@mui/x-internals': 7.24.0(@types/react@18.3.18)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 @@ -12670,7 +12428,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-internals@7.23.6(@types/react@18.3.18)(react@18.3.1)': + '@mui/x-internals@7.24.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 '@mui/utils': 6.3.1(@types/react@18.3.18)(react@18.3.1) @@ -12829,6 +12587,29 @@ snapshots: dependencies: safe-buffer: 5.2.1 + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@puppeteer/browsers@2.6.1': dependencies: debug: 4.4.0 @@ -12899,152 +12680,103 @@ snapshots: optionalDependencies: rollup: 4.31.0 - '@rollup/rollup-android-arm-eabi@4.28.1': - optional: true - '@rollup/rollup-android-arm-eabi@4.31.0': optional: true - '@rollup/rollup-android-arm64@4.28.1': - optional: true - '@rollup/rollup-android-arm64@4.31.0': optional: true - '@rollup/rollup-darwin-arm64@4.28.1': - optional: true - '@rollup/rollup-darwin-arm64@4.31.0': optional: true - '@rollup/rollup-darwin-x64@4.28.1': - optional: true - '@rollup/rollup-darwin-x64@4.31.0': optional: true - '@rollup/rollup-freebsd-arm64@4.28.1': - optional: true - '@rollup/rollup-freebsd-arm64@4.31.0': optional: true - '@rollup/rollup-freebsd-x64@4.28.1': - optional: true - '@rollup/rollup-freebsd-x64@4.31.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.1': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.1': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.1': - optional: true - '@rollup/rollup-linux-arm64-musl@4.31.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.1': - optional: true - '@rollup/rollup-linux-x64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-musl@4.28.1': - optional: true - '@rollup/rollup-linux-x64-musl@4.31.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.1': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.31.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.1': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.31.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.1': - optional: true - '@rollup/rollup-win32-x64-msvc@4.31.0': optional: true '@rtsao/scc@1.1.0': {} - '@shikijs/core@1.23.1': + '@shikijs/core@1.29.1': dependencies: - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/engine-javascript': 1.29.1 + '@shikijs/engine-oniguruma': 1.29.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 + + '@shikijs/engine-javascript@1.29.1': + dependencies: + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@1.23.1': + '@shikijs/engine-oniguruma@1.29.1': dependencies: - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-es: 0.4.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/engine-oniguruma@1.23.1': + '@shikijs/langs@1.29.1': dependencies: - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.1 - '@shikijs/types@1.23.1': + '@shikijs/themes@1.29.1': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.1 + + '@shikijs/types@1.29.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@10.0.1': {} - '@smithy/abort-controller@4.0.0': + '@smithy/abort-controller@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@smithy/chunked-blob-reader-native@4.0.0': @@ -13056,94 +12788,94 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/config-resolver@4.0.0': + '@smithy/config-resolver@4.0.1': dependencies: - '@smithy/node-config-provider': 4.0.0 - '@smithy/types': 4.0.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.0 + '@smithy/util-middleware': 4.0.1 tslib: 2.8.1 - '@smithy/core@3.0.0': + '@smithy/core@3.1.1': dependencies: - '@smithy/middleware-serde': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@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.0 - '@smithy/util-stream': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.0.2 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.0.0': + '@smithy/credential-provider-imds@4.0.1': dependencies: - '@smithy/node-config-provider': 4.0.0 - '@smithy/property-provider': 4.0.0 - '@smithy/types': 4.0.0 - '@smithy/url-parser': 4.0.0 + '@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.8.1 - '@smithy/eventstream-codec@4.0.0': + '@smithy/eventstream-codec@4.0.1': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 '@smithy/util-hex-encoding': 4.0.0 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.0.0': + '@smithy/eventstream-serde-browser@4.0.1': dependencies: - '@smithy/eventstream-serde-universal': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.0.0': + '@smithy/eventstream-serde-config-resolver@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.0.0': + '@smithy/eventstream-serde-node@4.0.1': dependencies: - '@smithy/eventstream-serde-universal': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.0.0': + '@smithy/eventstream-serde-universal@4.0.1': dependencies: - '@smithy/eventstream-codec': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/eventstream-codec': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.0.0': + '@smithy/fetch-http-handler@5.0.1': dependencies: - '@smithy/protocol-http': 5.0.0 - '@smithy/querystring-builder': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 '@smithy/util-base64': 4.0.0 tslib: 2.8.1 - '@smithy/hash-blob-browser@4.0.0': + '@smithy/hash-blob-browser@4.0.1': dependencies: '@smithy/chunked-blob-reader': 5.0.0 '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/hash-node@4.0.0': + '@smithy/hash-node@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 '@smithy/util-buffer-from': 4.0.0 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/hash-stream-node@4.0.0': + '@smithy/hash-stream-node@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.0.0': + '@smithy/invalid-dependency@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -13154,125 +12886,125 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/md5-js@4.0.0': + '@smithy/md5-js@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/middleware-content-length@4.0.0': + '@smithy/middleware-content-length@4.0.1': dependencies: - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.0.0': + '@smithy/middleware-endpoint@4.0.2': dependencies: - '@smithy/core': 3.0.0 - '@smithy/middleware-serde': 4.0.0 - '@smithy/node-config-provider': 4.0.0 - '@smithy/shared-ini-file-loader': 4.0.0 - '@smithy/types': 4.0.0 - '@smithy/url-parser': 4.0.0 - '@smithy/util-middleware': 4.0.0 + '@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.8.1 - '@smithy/middleware-retry@4.0.0': + '@smithy/middleware-retry@4.0.3': dependencies: - '@smithy/node-config-provider': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/service-error-classification': 4.0.0 - '@smithy/smithy-client': 4.0.0 - '@smithy/types': 4.0.0 - '@smithy/util-middleware': 4.0.0 - '@smithy/util-retry': 4.0.0 + '@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.8.1 uuid: 9.0.1 - '@smithy/middleware-serde@4.0.0': + '@smithy/middleware-serde@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.0.0': + '@smithy/middleware-stack@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.0.0': + '@smithy/node-config-provider@4.0.1': dependencies: - '@smithy/property-provider': 4.0.0 - '@smithy/shared-ini-file-loader': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.0.0': + '@smithy/node-http-handler@4.0.2': dependencies: - '@smithy/abort-controller': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/querystring-builder': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/abort-controller': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/property-provider@4.0.0': + '@smithy/property-provider@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/protocol-http@5.0.0': + '@smithy/protocol-http@5.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.0.0': + '@smithy/querystring-builder@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 '@smithy/util-uri-escape': 4.0.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.0.0': + '@smithy/querystring-parser@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.0.0': + '@smithy/service-error-classification@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 - '@smithy/shared-ini-file-loader@4.0.0': + '@smithy/shared-ini-file-loader@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/signature-v4@5.0.0': + '@smithy/signature-v4@5.0.1': dependencies: '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 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.0 + '@smithy/util-middleware': 4.0.1 '@smithy/util-uri-escape': 4.0.0 '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/smithy-client@4.0.0': + '@smithy/smithy-client@4.1.2': dependencies: - '@smithy/core': 3.0.0 - '@smithy/middleware-endpoint': 4.0.0 - '@smithy/middleware-stack': 4.0.0 - '@smithy/protocol-http': 5.0.0 - '@smithy/types': 4.0.0 - '@smithy/util-stream': 4.0.0 + '@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.8.1 - '@smithy/types@4.0.0': + '@smithy/types@4.1.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.0.0': + '@smithy/url-parser@4.0.1': dependencies: - '@smithy/querystring-parser': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/querystring-parser': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@smithy/util-base64@4.0.0': @@ -13303,50 +13035,50 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.0': + '@smithy/util-defaults-mode-browser@4.0.3': dependencies: - '@smithy/property-provider': 4.0.0 - '@smithy/smithy-client': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 bowser: 2.11.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.0': + '@smithy/util-defaults-mode-node@4.0.3': dependencies: - '@smithy/config-resolver': 4.0.0 - '@smithy/credential-provider-imds': 4.0.0 - '@smithy/node-config-provider': 4.0.0 - '@smithy/property-provider': 4.0.0 - '@smithy/smithy-client': 4.0.0 - '@smithy/types': 4.0.0 + '@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.8.1 - '@smithy/util-endpoints@3.0.0': + '@smithy/util-endpoints@3.0.1': dependencies: - '@smithy/node-config-provider': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@smithy/util-hex-encoding@4.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.0.0': + '@smithy/util-middleware@4.0.1': dependencies: - '@smithy/types': 4.0.0 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/util-retry@4.0.0': + '@smithy/util-retry@4.0.1': dependencies: - '@smithy/service-error-classification': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/service-error-classification': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 - '@smithy/util-stream@4.0.0': + '@smithy/util-stream@4.0.2': dependencies: - '@smithy/fetch-http-handler': 5.0.0 - '@smithy/node-http-handler': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/types': 4.1.0 '@smithy/util-base64': 4.0.0 '@smithy/util-buffer-from': 4.0.0 '@smithy/util-hex-encoding': 4.0.0 @@ -13367,10 +13099,10 @@ snapshots: '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 - '@smithy/util-waiter@4.0.0': + '@smithy/util-waiter@4.0.2': dependencies: - '@smithy/abort-controller': 4.0.0 - '@smithy/types': 4.0.0 + '@smithy/abort-controller': 4.0.1 + '@smithy/types': 4.1.0 tslib: 2.8.1 '@snyk/github-codeowners@1.1.0': @@ -13383,125 +13115,125 @@ snapshots: '@sqltools/formatter@1.2.5': {} - '@storybook/addon-actions@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-actions@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-backgrounds@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-controls@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.7(@types/react@18.3.18)(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-docs@8.5.0(@types/react@18.3.18)(storybook@8.5.0(prettier@3.4.2))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.18)(react@18.3.1) - '@storybook/blocks': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2)) - '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/blocks': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.4.7(@types/react@18.3.18)(storybook@8.4.7(prettier@3.4.2))': - dependencies: - '@storybook/addon-actions': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-backgrounds': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-controls': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-docs': 8.4.7(@types/react@18.3.18)(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-highlight': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-measure': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-outline': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-toolbars': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/addon-viewport': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - storybook: 8.4.7(prettier@3.4.2) + '@storybook/addon-essentials@8.5.0(@types/react@18.3.18)(storybook@8.5.0(prettier@3.4.2))': + dependencies: + '@storybook/addon-actions': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-backgrounds': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-controls': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-docs': 8.5.0(@types/react@18.3.18)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-highlight': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-measure': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-outline': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-toolbars': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-viewport': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-highlight@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/addon-interactions@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-interactions@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) polished: 4.3.1 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-links@8.4.7(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-links@8.5.0(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-measure@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-outline@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-toolbars@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/addon-viewport@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/addon-viewport@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/blocks@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))': + '@storybook/blocks@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/csf': 0.1.12 '@storybook/icons': 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': + '@storybook/builder-vite@8.5.0(storybook@8.5.0(prettier@3.4.2))(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: - '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0(prettier@3.4.2)) browser-assert: 1.2.1 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) - '@storybook/components@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/components@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/core@8.4.7(prettier@3.4.2)': + '@storybook/core@8.5.0(prettier@3.4.2)': dependencies: '@storybook/csf': 0.1.12 better-opn: 3.0.2 @@ -13521,10 +13253,10 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/csf-plugin@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) - unplugin: 1.16.0 + storybook: 8.5.0(prettier@3.4.2) + unplugin: 1.16.1 '@storybook/csf@0.1.12': dependencies: @@ -13537,91 +13269,92 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/instrumenter@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.8 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/manager-api@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/manager-api@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/preview-api@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/preview-api@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/react-dom-shim@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))': + '@storybook/react-dom-shim@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': + '@storybook/react-vite@8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.5.0(prettier@3.4.2))(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) '@rollup/pluginutils': 5.1.0(rollup@4.31.0) - '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) - '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2) + '@storybook/builder-vite': 8.5.0(storybook@8.5.0(prettier@3.4.2))(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + '@storybook/react': 8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))(typescript@5.7.2) find-up: 5.0.0 - magic-string: 0.30.14 + magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.0.3 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) tsconfig-paths: 4.2.0 - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + optionalDependencies: + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) transitivePeerDependencies: - - '@storybook/test' - rollup - supports-color - typescript - '@storybook/react@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)': + '@storybook/react@8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))(typescript@5.7.2)': dependencies: - '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/components': 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2)) - '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/manager-api': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/preview-api': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/theming': 8.5.0(storybook@8.5.0(prettier@3.4.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) optionalDependencies: - '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) typescript: 5.7.2 - '@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/theming@8.4.7(storybook@8.4.7(prettier@3.4.2))': + '@storybook/theming@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.7(prettier@3.4.2) + storybook: 8.5.0(prettier@3.4.2) - '@tanstack/eslint-plugin-query@5.62.9(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': + '@tanstack/eslint-plugin-query@5.62.16(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) eslint: 9.18.0(jiti@2.4.1) transitivePeerDependencies: - supports-color - typescript - '@tanstack/query-core@5.64.0': {} + '@tanstack/query-core@5.64.1': {} - '@tanstack/react-query@5.64.0(react@18.3.1)': + '@tanstack/react-query@5.64.1(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.64.0 + '@tanstack/query-core': 5.64.1 react: 18.3.1 '@testing-library/dom@10.4.0': @@ -13649,99 +13382,99 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@tiptap/core@2.8.0(@tiptap/pm@2.10.3)': + '@tiptap/core@2.11.3(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/pm': 2.10.3 + '@tiptap/pm': 2.11.3 - '@tiptap/extension-bold@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-bold@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-bubble-menu@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-bubble-menu@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 tippy.js: 6.3.7 - '@tiptap/extension-code@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-code@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-collaboration-cursor@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(y-prosemirror@1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))': + '@tiptap/extension-collaboration-cursor@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(y-prosemirror@1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - y-prosemirror: 1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + y-prosemirror: 1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23) - '@tiptap/extension-collaboration@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)(y-prosemirror@1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))': + '@tiptap/extension-collaboration@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)(y-prosemirror@1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 - y-prosemirror: 1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 + y-prosemirror: 1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23) - '@tiptap/extension-floating-menu@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-floating-menu@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 tippy.js: 6.3.7 - '@tiptap/extension-gapcursor@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-gapcursor@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 - '@tiptap/extension-hard-break@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-hard-break@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-history@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-history@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 - '@tiptap/extension-horizontal-rule@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-horizontal-rule@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 - '@tiptap/extension-italic@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-italic@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-link@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)': + '@tiptap/extension-link@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 - linkifyjs: 4.1.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 + linkifyjs: 4.2.0 - '@tiptap/extension-paragraph@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-paragraph@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-strike@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-strike@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-table-cell@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-table-cell@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-table-header@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-table-header@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-table-row@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-table-row@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-text@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-text@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/extension-underline@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))': + '@tiptap/extension-underline@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) - '@tiptap/pm@2.10.3': + '@tiptap/pm@2.11.3': dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 @@ -13753,26 +13486,26 @@ snapshots: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.1 prosemirror-menu: 1.2.4 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-schema-basic: 1.2.3 prosemirror-schema-list: 1.5.0 prosemirror-state: 1.4.3 - prosemirror-tables: 1.6.1 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0) + prosemirror-tables: 1.6.2 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2) prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 - '@tiptap/react@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tiptap/react@2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tiptap/core': 2.8.0(@tiptap/pm@2.10.3) - '@tiptap/extension-bubble-menu': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/extension-floating-menu': 2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.10.3))(@tiptap/pm@2.10.3) - '@tiptap/pm': 2.10.3 + '@tiptap/core': 2.11.3(@tiptap/pm@2.11.3) + '@tiptap/extension-bubble-menu': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/extension-floating-menu': 2.11.3(@tiptap/core@2.11.3(@tiptap/pm@2.11.3))(@tiptap/pm@2.11.3) + '@tiptap/pm': 2.11.3 '@types/use-sync-external-store': 0.0.6 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1) '@tokenizer/token@0.3.0': {} @@ -13806,7 +13539,7 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/caseless@0.12.5': {} @@ -13818,17 +13551,17 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/cookiejar@2.1.5': {} '@types/cors@2.8.17': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/d3-array@3.0.3': {} @@ -13991,13 +13724,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/ssh2': 1.15.1 - '@types/dockerode@3.3.33': + '@types/dockerode@3.3.34': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/ssh2': 1.15.1 '@types/doctrine@0.0.9': {} @@ -14015,7 +13748,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -14031,7 +13764,7 @@ snapshots: '@types/fluent-ffmpeg@2.1.27': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/geojson@7946.0.14': {} @@ -14047,7 +13780,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -14057,7 +13790,7 @@ snapshots: '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/linkify-it@5.0.0': {} @@ -14094,25 +13827,21 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 form-data: 4.0.1 '@types/node-telegram-bot-api@0.64.7': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/request': 2.48.12 '@types/node@10.14.22': {} - '@types/node@18.19.70': - dependencies: - undici-types: 5.26.5 - - '@types/node@18.19.71': + '@types/node@18.19.74': dependencies: undici-types: 5.26.5 - '@types/node@22.10.2': + '@types/node@22.10.7': dependencies: undici-types: 6.20.0 @@ -14122,13 +13851,13 @@ snapshots: '@types/pg@8.11.10': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 pg-protocol: 1.7.0 pg-types: 4.0.2 '@types/prompts@2.4.9': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 kleur: 3.0.3 '@types/prop-types@15.7.14': {} @@ -14169,7 +13898,7 @@ snapshots: '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/tough-cookie': 4.0.5 form-data: 2.5.1 @@ -14182,23 +13911,23 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/send': 0.17.4 '@types/ssh2@1.15.1': dependencies: - '@types/node': 18.19.70 + '@types/node': 18.19.74 '@types/superagent@8.1.7': dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/supertest@6.0.2': dependencies: @@ -14232,17 +13961,17 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 optional: true - '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/type-utils': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/type-utils': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.20.0 eslint: 9.18.0(jiti@2.4.1) graphemer: 1.4.0 ignore: 5.3.2 @@ -14260,12 +13989,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.4.0 eslint: 9.18.0(jiti@2.4.1) typescript: 5.7.2 @@ -14277,15 +14006,15 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@8.19.1': + '@typescript-eslint/scope-manager@8.20.0': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 - '@typescript-eslint/type-utils@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) debug: 4.4.0 eslint: 9.18.0(jiti@2.4.1) ts-api-utils: 2.0.0(typescript@5.7.2) @@ -14295,7 +14024,7 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@8.19.1': {} + '@typescript-eslint/types@8.20.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': dependencies: @@ -14311,10 +14040,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.20.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -14340,12 +14069,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/utils@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.1)) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) eslint: 9.18.0(jiti@2.4.1) typescript: 5.7.2 transitivePeerDependencies: @@ -14356,12 +14085,12 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.19.1': + '@typescript-eslint/visitor-keys@8.20.0': dependencies: - '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/types': 8.20.0 eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} '@use-gesture/core@10.3.1': {} @@ -14572,18 +14301,18 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 - '@vitejs/plugin-react@4.3.4(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': + '@vitejs/plugin-react@4.3.4(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0))': + '@vitest/coverage-v8@2.1.8(vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -14592,12 +14321,12 @@ snapshots: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.14 + magic-string: 0.30.17 magicast: 0.3.5 std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0) + vitest: 3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color @@ -14608,20 +14337,20 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/expect@2.1.8': + '@vitest/expect@3.0.4': dependencies: - '@vitest/spy': 2.1.8 - '@vitest/utils': 2.1.8 + '@vitest/spy': 3.0.4 + '@vitest/utils': 3.0.4 chai: 5.1.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0))': + '@vitest/mocker@3.0.4(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: - '@vitest/spy': 2.1.8 + '@vitest/spy': 3.0.4 estree-walker: 3.0.3 - magic-string: 0.30.14 + magic-string: 0.30.17 optionalDependencies: - vite: 5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) '@vitest/pretty-format@2.0.5': dependencies: @@ -14631,22 +14360,26 @@ snapshots: dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.8': + '@vitest/pretty-format@3.0.4': dependencies: - '@vitest/utils': 2.1.8 - pathe: 1.1.2 + tinyrainbow: 2.0.0 - '@vitest/snapshot@2.1.8': + '@vitest/runner@3.0.4': dependencies: - '@vitest/pretty-format': 2.1.8 - magic-string: 0.30.14 - pathe: 1.1.2 + '@vitest/utils': 3.0.4 + pathe: 2.0.2 + + '@vitest/snapshot@3.0.4': + dependencies: + '@vitest/pretty-format': 3.0.4 + magic-string: 0.30.17 + pathe: 2.0.2 '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - '@vitest/spy@2.1.8': + '@vitest/spy@3.0.4': dependencies: tinyspy: 3.0.2 @@ -14663,6 +14396,12 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + '@vitest/utils@3.0.4': + dependencies: + '@vitest/pretty-format': 3.0.4 + loupe: 3.1.2 + tinyrainbow: 2.0.0 + '@xmldom/xmldom@0.8.10': {} '@xmldom/xmldom@0.9.5': @@ -14826,7 +14565,7 @@ snapshots: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.8 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.6 is-string: 1.1.1 @@ -14837,7 +14576,7 @@ snapshots: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.8 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 array.prototype.findlast@1.2.5: @@ -14846,7 +14585,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.8 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 array.prototype.findlastindex@1.2.5: @@ -14855,7 +14594,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.8 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 array.prototype.flat@1.3.2: @@ -14879,7 +14618,7 @@ snapshots: es-abstract: 1.23.8 es-array-method-boxes-properly: 1.0.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 is-string: 1.1.1 array.prototype.tosorted@1.1.4: @@ -15173,8 +14912,9 @@ snapshots: canvas@3.0.1: dependencies: node-addon-api: 7.1.1 - prebuild-install: 7.1.2 + prebuild-install: 7.1.3 simple-get: 3.1.1 + optional: true caseless@0.12.0: {} @@ -15490,9 +15230,9 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 2.4.1 typescript: 5.7.2 @@ -15802,10 +15542,12 @@ snapshots: decompress-response@4.2.1: dependencies: mimic-response: 2.1.0 + optional: true decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 + optional: true deep-eql@5.0.2: {} @@ -15883,7 +15625,7 @@ snapshots: dependencies: path-type: 4.0.0 - docker-modem@5.0.3: + docker-modem@5.0.5: dependencies: debug: 4.4.0 readable-stream: 3.6.2 @@ -15892,11 +15634,15 @@ snapshots: transitivePeerDependencies: - supports-color - dockerode@4.0.2: + dockerode@4.0.3: dependencies: '@balena/dockerignore': 1.0.2 - docker-modem: 5.0.3 + '@grpc/grpc-js': 1.12.5 + '@grpc/proto-loader': 0.7.13 + docker-modem: 5.0.5 + protobufjs: 7.4.0 tar-fs: 2.0.1 + uuid: 10.0.0 transitivePeerDependencies: - supports-color @@ -16034,7 +15780,7 @@ snapshots: data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-set-tostringtag: 2.0.3 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 @@ -16099,9 +15845,9 @@ snapshots: iterator.prototype: 1.1.4 safe-array-concat: 1.1.3 - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -16128,32 +15874,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -16250,15 +15970,15 @@ snapshots: is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) eslint: 9.18.0(jiti@2.4.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@2.4.1)) @@ -16277,7 +15997,7 @@ snapshots: - supports-color - typescript - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -16288,7 +16008,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.18.0(jiti@2.4.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.1)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16300,13 +16020,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.18.0(jiti@2.4.1)))(eslint@9.18.0(jiti@2.4.1))(prettier@3.4.2): + eslint-plugin-prettier@5.2.2(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.18.0(jiti@2.4.1)))(eslint@9.18.0(jiti@2.4.1))(prettier@3.4.2): dependencies: eslint: 9.18.0(jiti@2.4.1) prettier: 3.4.2 @@ -16468,7 +16188,8 @@ snapshots: optionalDependencies: '@xmldom/xmldom': 0.9.5 - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true expect-type@1.1.0: {} @@ -16794,7 +16515,7 @@ snapshots: dunder-proto: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 gopd: 1.2.0 has-symbols: 1.1.0 @@ -16803,6 +16524,11 @@ snapshots: get-nonce@1.0.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -16839,7 +16565,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true glob-parent@5.1.2: dependencies: @@ -17058,7 +16785,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.4: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -17344,9 +17071,9 @@ snapshots: ipaddr.js@1.9.1: {} - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-array-buffer@3.0.5: @@ -17415,9 +17142,12 @@ snapshots: dependencies: get-east-asian-width: 1.2.0 - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -17539,7 +17269,7 @@ snapshots: iterator.prototype@1.1.4: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.6 has-symbols: 1.1.0 reflect.getprototypeof: 1.0.9 @@ -17588,7 +17318,7 @@ snapshots: rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.0.0 + tough-cookie: 5.1.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -17618,7 +17348,7 @@ snapshots: rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.0.0 + tough-cookie: 5.1.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -17649,7 +17379,7 @@ snapshots: rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.0.0 + tough-cookie: 5.1.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -17785,11 +17515,11 @@ snapshots: kleur@4.1.5: {} - knip@5.41.1(@types/node@22.10.2)(typescript@5.7.2): + knip@5.41.1(@types/node@22.10.7)(typescript@5.7.2): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.10.2 + '@types/node': 22.10.7 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.3 @@ -17808,10 +17538,10 @@ snapshots: kuler@2.0.0: {} - langchain@0.3.11(@langchain/anthropic@0.3.8(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.78.1(zod@3.24.1))(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1)): + langchain@0.3.11(@langchain/anthropic@0.3.8(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))))(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.78.1(zod@3.24.1))(typeorm@0.3.20(ioredis@5.4.2)(pg@8.13.1)): dependencies: - '@langchain/core': 0.3.29(openai@4.78.1(zod@3.24.1)) - '@langchain/openai': 0.3.17(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))) + '@langchain/core': 0.3.30(openai@4.78.1(zod@3.24.1)) + '@langchain/openai': 0.3.17(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))) '@langchain/textsplitters': 0.0.3(openai@4.78.1(zod@3.24.1)) js-tiktoken: 1.0.15 js-yaml: 4.1.0 @@ -17824,7 +17554,7 @@ snapshots: zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: - '@langchain/anthropic': 0.3.8(@langchain/core@0.3.29(openai@4.78.1(zod@3.24.1))) + '@langchain/anthropic': 0.3.8(@langchain/core@0.3.30(openai@4.78.1(zod@3.24.1))) axios: 1.7.9(debug@4.4.0) cheerio: 1.0.0 handlebars: 4.7.8 @@ -17866,7 +17596,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lib0@0.2.98: + lib0@0.2.99: dependencies: isomorphic.js: 0.2.5 @@ -17878,7 +17608,7 @@ snapshots: dependencies: uc.micro: 2.1.0 - linkifyjs@4.1.3: {} + linkifyjs@4.2.0: {} lint-staged@15.3.0: dependencies: @@ -17985,6 +17715,8 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + long@5.2.4: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -18011,7 +17743,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.14: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -18043,7 +17775,7 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 - markdown-table@3.0.3: {} + markdown-table@3.0.4: {} math-expression-evaluator@1.4.0: {} @@ -18100,7 +17832,7 @@ snapshots: mdast-util-gfm-table@1.0.7: dependencies: '@types/mdast': 3.0.15 - markdown-table: 3.0.3 + markdown-table: 3.0.4 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: @@ -18143,7 +17875,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -18427,9 +18159,11 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@2.1.0: {} + mimic-response@2.1.0: + optional: true - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true min-indent@1.0.1: {} @@ -18519,7 +18253,8 @@ snapshots: nanoid@3.3.8: {} - napi-build-utils@1.0.2: {} + napi-build-utils@2.0.0: + optional: true natural-compare-lite@1.4.0: {} @@ -18539,11 +18274,13 @@ snapshots: fp-ts: 2.16.9 monocle-ts: 2.3.13(fp-ts@2.16.9) - node-abi@3.71.0: + node-abi@3.73.0: dependencies: semver: 7.6.3 + optional: true - node-addon-api@7.1.1: {} + node-addon-api@7.1.1: + optional: true node-cron@3.0.3: dependencies: @@ -18637,7 +18374,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -18645,14 +18382,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.8 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: @@ -18665,7 +18402,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 obuf@1.1.2: {} @@ -18705,11 +18442,11 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.4.1: + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.1 - regex-recursion: 4.2.1 + regex: 5.1.1 + regex-recursion: 5.1.1 open@8.4.2: dependencies: @@ -18719,7 +18456,7 @@ snapshots: openai@4.78.1(zod@3.24.1): dependencies: - '@types/node': 18.19.70 + '@types/node': 18.19.74 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -18882,7 +18619,7 @@ snapshots: path-type@4.0.0: {} - pathe@1.1.2: {} + pathe@2.0.2: {} pathval@2.0.0: {} @@ -18977,12 +18714,6 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss@8.4.49: - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.1: dependencies: nanoid: 3.3.8 @@ -19036,20 +18767,21 @@ snapshots: stream-length: 1.0.2 uuid: 8.3.2 - prebuild-install@7.1.2: + prebuild-install@7.1.3: dependencies: detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.71.0 + napi-build-utils: 2.0.0 + node-abi: 3.73.0 pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.0.1 + tar-fs: 2.1.2 tunnel-agent: 0.6.0 + optional: true prelude-ls@1.2.1: {} @@ -19098,7 +18830,7 @@ snapshots: prosemirror-commands@1.6.2: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 @@ -19106,29 +18838,29 @@ snapshots: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 prosemirror-gapcursor@1.3.2: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 - prosemirror-highlight@0.9.0(@types/hast@3.0.4)(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.2)(prosemirror-view@1.37.0)(shiki@1.23.1): + prosemirror-highlight@0.9.0(@types/hast@3.0.4)(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-transform@1.10.2)(prosemirror-view@1.37.2)(shiki@1.29.1): optionalDependencies: '@types/hast': 3.0.4 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 - shiki: 1.23.1 + prosemirror-view: 1.37.2 + shiki: 1.29.1 prosemirror-history@1.4.1: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 rope-sequence: 1.3.4 prosemirror-inputrules@1.4.0: @@ -19145,7 +18877,7 @@ snapshots: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-menu@1.2.4: dependencies: @@ -19154,52 +18886,67 @@ snapshots: prosemirror-history: 1.4.1 prosemirror-state: 1.4.3 - prosemirror-model@1.24.0: + prosemirror-model@1.24.1: dependencies: orderedmap: 2.1.1 prosemirror-schema-basic@1.2.3: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-schema-list@1.5.0: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 prosemirror-state@1.4.3: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 - prosemirror-tables@1.6.1: + prosemirror-tables@1.6.2: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.37.0 + prosemirror-view: 1.37.2 prosemirror-transform@1.10.2: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 - prosemirror-view@1.37.0: + prosemirror-view@1.37.2: dependencies: - prosemirror-model: 1.24.0 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.10.7 + long: 5.2.4 + protocol-buffers-schema@3.6.0: {} proxy-addr@2.0.7: @@ -19336,7 +19083,7 @@ snapshots: ra-core@5.4.4(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.54.1(react@18.3.1))(react-router-dom@6.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@6.28.1(react@18.3.1))(react@18.3.1): dependencies: - '@tanstack/react-query': 5.64.0(react@18.3.1) + '@tanstack/react-query': 5.64.1(react@18.3.1) clsx: 2.1.1 date-fns: 3.6.0 eventemitter3: 5.0.1 @@ -19378,7 +19125,7 @@ snapshots: '@mui/icons-material': 5.16.14(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@mui/material': 5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/utils': 6.3.1(@types/react@18.3.18)(react@18.3.1) - '@tanstack/react-query': 5.64.0(react@18.3.1) + '@tanstack/react-query': 5.64.1(react@18.3.1) autosuggest-highlight: 3.3.4 clsx: 2.1.1 css-mediaquery: 0.1.2 @@ -19502,7 +19249,7 @@ snapshots: dependencies: react: 18.3.1 - react-icons@5.3.0(react@18.3.1): + react-icons@5.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -19512,29 +19259,29 @@ snapshots: react-lifecycles-compat@3.0.4: {} - react-number-format@5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-number-format@5.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.6(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.18 - react-remove-scroll@2.6.0(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.18)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@18.3.18)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.18)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 @@ -19568,21 +19315,20 @@ snapshots: react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 - react-style-singleton@2.2.1(@types/react@18.3.18)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.18 - react-textarea-autosize@8.5.3(@types/react@18.3.18)(react@18.3.1): + react-textarea-autosize@8.5.6(@types/react@18.3.18)(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 react: 18.3.1 - use-composed-ref: 1.3.0(react@18.3.1) - use-latest: 1.2.1(@types/react@18.3.18)(react@18.3.1) + use-composed-ref: 1.4.0(@types/react@18.3.18)(react@18.3.1) + use-latest: 1.3.0(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - '@types/react' @@ -19704,13 +19450,16 @@ snapshots: regenerator-runtime@0.14.1: {} - regex-recursion@4.2.1: + regex-recursion@5.1.1: dependencies: + regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.0.1: {} + regex@5.1.1: + dependencies: + regex-utilities: 2.3.0 regexp.prototype.flags@1.5.3: dependencies: @@ -19892,31 +19641,6 @@ snapshots: robust-predicates@3.0.2: {} - 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.3 - rollup@4.31.0: dependencies: '@types/estree': 1.0.6 @@ -20132,13 +19856,15 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.23.1: + shiki@1.29.1: dependencies: - '@shikijs/core': 1.23.1 - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.29.1 + '@shikijs/engine-javascript': 1.29.1 + '@shikijs/engine-oniguruma': 1.29.1 + '@shikijs/langs': 1.29.1 + '@shikijs/themes': 1.29.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 side-channel-list@1.0.0: @@ -20175,19 +19901,22 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@3.1.1: dependencies: decompress-response: 4.2.1 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-swizzle@0.2.2: dependencies: @@ -20295,9 +20024,9 @@ snapshots: stealthy-require@1.1.1: {} - storybook@8.4.7(prettier@3.4.2): + storybook@8.5.0(prettier@3.4.2): dependencies: - '@storybook/core': 8.4.7(prettier@3.4.2) + '@storybook/core': 8.5.0(prettier@3.4.2) optionalDependencies: prettier: 3.4.2 transitivePeerDependencies: @@ -20355,7 +20084,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.8 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.2.6 gopd: 1.2.0 has-symbols: 1.1.0 @@ -20376,7 +20105,7 @@ snapshots: define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.8 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: @@ -20384,13 +20113,13 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@0.10.31: {} @@ -20488,7 +20217,7 @@ snapshots: esrap: 1.2.3 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.14 + magic-string: 0.30.17 zimmerframe: 1.1.2 symbol-tree@3.2.4: {} @@ -20509,6 +20238,14 @@ snapshots: pump: 3.0.2 tar-stream: 2.2.0 + tar-fs@2.1.2: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + optional: true + tar-fs@3.0.6: dependencies: pump: 3.0.2 @@ -20584,12 +20321,14 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} tinypool@1.0.2: {} tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} + tinyspy@3.0.2: {} tippy.js@6.3.7: @@ -20598,11 +20337,11 @@ snapshots: tlds@1.252.0: {} - tldts-core@6.1.61: {} + tldts-core@6.1.74: {} - tldts@6.1.61: + tldts@6.1.74: dependencies: - tldts-core: 6.1.61 + tldts-core: 6.1.74 to-no-case@1.0.2: {} @@ -20643,9 +20382,9 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - tough-cookie@5.0.0: + tough-cookie@5.1.0: dependencies: - tldts: 6.1.61 + tldts: 6.1.74 tr46@0.0.3: {} @@ -20747,7 +20486,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.26.1: {} + type-fest@4.33.0: {} type-is@1.6.18: dependencies: @@ -20816,11 +20555,11 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2): + typescript-eslint@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.2) eslint: 9.18.0(jiti@2.4.1) typescript: 5.7.2 transitivePeerDependencies: @@ -20924,7 +20663,7 @@ snapshots: unpipe@1.0.0: {} - unplugin@1.16.0: + unplugin@1.16.1: dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 @@ -20967,31 +20706,33 @@ snapshots: ip-regex: 4.3.0 tlds: 1.252.0 - use-callback-ref@1.3.2(@types/react@18.3.18)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.18 - use-composed-ref@1.3.0(react@18.3.1): + use-composed-ref@1.4.0(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.18)(react@18.3.1): + use-isomorphic-layout-effect@1.2.0(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - use-latest@1.2.1(@types/react@18.3.18)(react@18.3.1): + use-latest@1.3.0(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.18)(react@18.3.1) + use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - use-sidecar@1.1.2(@types/react@18.3.18)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 @@ -21003,7 +20744,7 @@ snapshots: dependencies: react: 18.3.1 - use-sync-external-store@1.2.2(react@18.3.1): + use-sync-external-store@1.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -21012,8 +20753,8 @@ snapshots: util@0.12.5: dependencies: inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 is-typed-array: 1.1.15 which-typed-array: 1.1.18 @@ -21108,15 +20849,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.8(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0): + vite-node@3.0.4(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: cac: 6.7.14 debug: 4.4.0 - es-module-lexer: 1.5.4 - pathe: 1.1.2 - vite: 5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) + es-module-lexer: 1.6.0 + pathe: 2.0.2 + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -21125,53 +20867,33 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vite-plugin-css-injected-by-js@3.5.2(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-css-injected-by-js@3.5.2(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) vite-plugin-optimizer@1.4.3: {} - vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0)): - dependencies: - debug: 4.4.0 - globrex: 0.1.2 - tsconfck: 3.0.3(typescript@5.7.2) - optionalDependencies: - vite: 5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) - transitivePeerDependencies: - - supports-color - - typescript - - vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.7.2) optionalDependencies: - vite: 6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.28.1 - optionalDependencies: - '@types/node': 22.10.2 - fsevents: 2.3.3 - sass: 1.82.0 - terser: 5.37.0 - - vite@6.0.9(@types/node@22.10.2)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.5.1 rollup: 4.31.0 optionalDependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 fsevents: 2.3.3 jiti: 2.4.1 sass: 1.82.0 @@ -21179,44 +20901,46 @@ snapshots: tsx: 4.19.2 yaml: 2.6.1 - vitest-mock-extended@2.0.2(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0)): + vitest-mock-extended@2.0.2(typescript@5.7.2)(vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: ts-essentials: 10.0.1(typescript@5.7.2) typescript: 5.7.2 - vitest: 2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0) + vitest: 3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) - vitest-mock-extended@2.0.2(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)): + vitest-mock-extended@2.0.2(typescript@5.7.2)(vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)): dependencies: ts-essentials: 10.0.1(typescript@5.7.2) typescript: 5.7.2 - vitest: 2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0) + vitest: 3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) - vitest@2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0): + vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@2.11.2))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: - '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0)) - '@vitest/pretty-format': 2.1.8 - '@vitest/runner': 2.1.8 - '@vitest/snapshot': 2.1.8 - '@vitest/spy': 2.1.8 - '@vitest/utils': 2.1.8 + '@vitest/expect': 3.0.4 + '@vitest/mocker': 3.0.4(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + '@vitest/pretty-format': 3.0.4 + '@vitest/runner': 3.0.4 + '@vitest/snapshot': 3.0.4 + '@vitest/spy': 3.0.4 + '@vitest/utils': 3.0.4 chai: 5.1.2 debug: 4.4.0 expect-type: 1.1.0 - magic-string: 0.30.14 - pathe: 1.1.2 + magic-string: 0.30.17 + pathe: 2.0.2 std-env: 3.8.0 tinybench: 2.9.0 - tinyexec: 0.3.1 + tinyexec: 0.3.2 tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) - vite-node: 2.1.8(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) + tinyrainbow: 2.0.0 + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite-node: 3.0.4(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.10.2 + '@types/debug': 4.1.12 + '@types/node': 22.10.7 jsdom: 26.0.0(canvas@2.11.2) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -21226,33 +20950,37 @@ snapshots: - sugarss - supports-color - terser - - vitest@2.1.8(@types/node@22.10.2)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0): - dependencies: - '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0)) - '@vitest/pretty-format': 2.1.8 - '@vitest/runner': 2.1.8 - '@vitest/snapshot': 2.1.8 - '@vitest/spy': 2.1.8 - '@vitest/utils': 2.1.8 + - tsx + - yaml + + vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.4.1)(jsdom@26.0.0(canvas@3.0.1))(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): + dependencies: + '@vitest/expect': 3.0.4 + '@vitest/mocker': 3.0.4(vite@6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + '@vitest/pretty-format': 3.0.4 + '@vitest/runner': 3.0.4 + '@vitest/snapshot': 3.0.4 + '@vitest/spy': 3.0.4 + '@vitest/utils': 3.0.4 chai: 5.1.2 debug: 4.4.0 expect-type: 1.1.0 - magic-string: 0.30.14 - pathe: 1.1.2 + magic-string: 0.30.17 + pathe: 2.0.2 std-env: 3.8.0 tinybench: 2.9.0 - tinyexec: 0.3.1 + tinyexec: 0.3.2 tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) - vite-node: 2.1.8(@types/node@22.10.2)(sass@1.82.0)(terser@5.37.0) + tinyrainbow: 2.0.0 + vite: 6.0.11(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite-node: 3.0.4(@types/node@22.10.7)(jiti@2.4.1)(sass@1.82.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.10.2 + '@types/debug': 4.1.12 + '@types/node': 22.10.7 jsdom: 26.0.0(canvas@3.0.1) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -21262,6 +20990,8 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml w3c-keyname@2.2.8: {} @@ -21326,7 +21056,7 @@ snapshots: is-async-function: 2.0.0 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.0 is-regex: 1.2.1 is-weakref: 1.1.0 isarray: 2.0.5 @@ -21459,19 +21189,19 @@ snapshots: xtend@4.0.2: {} - y-prosemirror@1.2.13(prosemirror-model@1.24.0)(prosemirror-state@1.4.3)(prosemirror-view@1.37.0)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19): + y-prosemirror@1.2.13(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23): dependencies: - lib0: 0.2.98 - prosemirror-model: 1.24.0 + lib0: 0.2.99 + prosemirror-model: 1.24.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.37.0 - y-protocols: 1.0.6(yjs@13.6.19) - yjs: 13.6.19 + prosemirror-view: 1.37.2 + y-protocols: 1.0.6(yjs@13.6.23) + yjs: 13.6.23 - y-protocols@1.0.6(yjs@13.6.19): + y-protocols@1.0.6(yjs@13.6.23): dependencies: - lib0: 0.2.98 - yjs: 13.6.19 + lib0: 0.2.99 + yjs: 13.6.23 y18n@5.0.8: {} @@ -21513,9 +21243,9 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yjs@13.6.19: + yjs@13.6.23: dependencies: - lib0: 0.2.98 + lib0: 0.2.99 yocto-queue@0.1.0: {} diff --git a/services/admin-web/package.json b/services/admin-web/package.json index 97efa3ec7b..257cc2393b 100644 --- a/services/admin-web/package.json +++ b/services/admin-web/package.json @@ -40,7 +40,7 @@ "@liexp/ui": "workspace:*", "@mui/icons-material": "^5.16.14", "@mui/material": "^5.16.14", - "@tanstack/react-query": "^5.63.0", + "@tanstack/react-query": "^5.64.1", "debug": "^4.3.4", "fp-ts": "^2.16.9", "io-ts": "^2.2.22", @@ -53,16 +53,16 @@ }, "devDependencies": { "@types/debug": "^4.1.12", - "@types/node": "^22.10.2", + "@types/node": "^22.10.7", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "dotenv": "^16.4.7", "eslint": "^9.18.0", "typescript": "^5.6.2", - "vite": "^6.0.9", + "vite": "^6.0.11", "vite-plugin-css-injected-by-js": "^3.5.2", "vite-plugin-optimizer": "^1.4.3", "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/services/ai-bot/package.json b/services/ai-bot/package.json index 8378e4d8fd..cfeb8caa86 100644 --- a/services/ai-bot/package.json +++ b/services/ai-bot/package.json @@ -21,10 +21,10 @@ "pkg": "./scripts/pkg.sh" }, "dependencies": { - "@aws-sdk/client-sso-oidc": "^3.726.0", - "@aws-sdk/client-sts": "^3.726.1", + "@aws-sdk/client-sso-oidc": "^3.731.1", + "@aws-sdk/client-sts": "^3.731.1", "@langchain/community": "^0.3.23", - "@langchain/core": "^0.3.29", + "@langchain/core": "^0.3.30", "@liexp/backend": "workspace:*", "@liexp/core": "workspace:*", "@liexp/shared": "workspace:*", diff --git a/services/ai-bot/src/run.ts b/services/ai-bot/src/run.ts index 00d655a4b5..50e32b0536 100644 --- a/services/ai-bot/src/run.ts +++ b/services/ai-bot/src/run.ts @@ -1,3 +1,4 @@ +import fs from "fs"; import path from "path"; import { type AvailableModels, @@ -136,7 +137,7 @@ void pipe( fp.TE.bind("env", () => pipe(loadAndParseENV(parseENV)(process.cwd()), fp.TE.fromEither), ), - fp.TE.bind("fs", () => fp.TE.right(GetFSClient())), + fp.TE.bind("fs", () => fp.TE.right(GetFSClient({ client: fs }))), fp.TE.bind("config", ({ fs }) => configProvider({ fs })), fp.TE.bind("langchain", ({ config }) => fp.TE.right( diff --git a/services/api/.gitignore b/services/api/.gitignore index 94ded209dd..4465db3203 100644 --- a/services/api/.gitignore +++ b/services/api/.gitignore @@ -1,3 +1,2 @@ db/dump/*.sql -test/__databases/** -config/nlp/*.json \ No newline at end of file +test/__databases/** \ No newline at end of file diff --git a/services/api/package.json b/services/api/package.json index 5f39ee5980..77573c6a92 100644 --- a/services/api/package.json +++ b/services/api/package.json @@ -56,18 +56,15 @@ "src/**/*.(ts|tsx|js|jsx)": "eslint --fix" }, "dependencies": { - "@aws-sdk/client-s3": "^3.726.1", + "@aws-sdk/client-s3": "^3.732.0", "@liexp/backend": "workspace:*", "@liexp/core": "workspace:*", "@liexp/shared": "workspace:*", - "@tanstack/react-query": "^5.63.0", "axios": "^1.7.9", "body-parser": "^1.20.3", "cors": "2.8.5", - "cronstrue": "^2.50.0", "date-fns": "^4.1.0", "debug": "*", - "domino": "^2.1.6", "express": "^4.21.0", "express-jwt": "^8.5.1", "express-unless": "^2.1.3", @@ -78,10 +75,7 @@ "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", "multer": "^1.4.5-lts.1", - "node-telegram-bot-api": "^0.66.0", - "nodemw": "^0.22.0", "page-metadata-parser": "^1.1.4", - "parse2-kmz": "^1.0.7", "pg": "^8.11.5", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -89,37 +83,33 @@ "ts-endpoint-express": "^2.0.0", "tsx": "^4.19.2", "typeorm": "^0.3.20", - "typescript": "^5.6.2", - "wink-eng-lite-web-model": "^1.8.0", - "wink-nlp": "^2.3.0", - "wink-nlp-utils": "^2.1.0" + "typescript": "^5.6.2" }, "devDependencies": { "@liexp/test": "workspace:*", "@types/body-parser": "^1.19.5", "@types/cors": "^2.8.17", "@types/debug": "^4.1.12", - "@types/dockerode": "^3.3.33", + "@types/dockerode": "^3.3.34", "@types/express": "^4.17.21", "@types/fluent-ffmpeg": "^2.1.26", "@types/jsonwebtoken": "^9.0.6", "@types/lodash": "^4.17.14", "@types/multer": "^1.4.12", - "@types/node": "^22.10.2", - "@types/node-telegram-bot-api": "^0.64.7", + "@types/node": "^22.10.7", "@types/pg": "^8.11.10", "@types/prompts": "^2.4.9", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/supertest": "^6.0.2", - "dockerode": "^4.0.2", + "dockerode": "^4.0.3", "dotenv": "^16.4.7", "eslint": "^9.18.0", "prompts": "^2.4.2", "supertest": "^7.0.0", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^2.1.8", + "vitest": "^3.0.3", "vitest-mock-extended": "^2.0.2" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/services/api/src/app/config.ts b/services/api/src/app/config.ts index 72fff66501..ad461fac69 100644 --- a/services/api/src/app/config.ts +++ b/services/api/src/app/config.ts @@ -1,4 +1,3 @@ -import { mkdirSync } from "fs"; import path from "path"; import { type BEConfig } from "@liexp/backend/lib/context/config.context.js"; import { EventsConfig } from "@liexp/backend/lib/queries/config/index.js"; @@ -24,13 +23,6 @@ export const Config = (env: ENV, cwd: string): AppConfig => { stats: path.resolve(tempRoot, "stats"), }; - // TODO: handle properly a possible error thrown by mkdirSync - [...Object.values(configFolders), ...Object.values(tempFolders)].forEach( - (folder) => { - mkdirSync(folder, { recursive: true }); - }, - ); - return { cors: { origin: env.NODE_ENV === "production" ? true : "*", diff --git a/services/api/src/context/context.type.ts b/services/api/src/context/context.type.ts index 060a86da16..80524c5e2c 100644 --- a/services/api/src/context/context.type.ts +++ b/services/api/src/context/context.type.ts @@ -4,7 +4,6 @@ import { type FFMPEGProviderContext, type GeocodeProviderContext, type NERProviderContext, - type URLMetadataContext, type WikipediaProviderContext, } from "@liexp/backend/lib/context/index.js"; import { type JWTProviderContext } from "@liexp/backend/lib/context/jwt.context.js"; @@ -13,10 +12,10 @@ import { type PuppeteerProviderContext } from "@liexp/backend/lib/context/puppet import { type QueuesProviderContext } from "@liexp/backend/lib/context/queue.context.js"; import { type RedisContext } from "@liexp/backend/lib/context/redis.context.js"; import { type SpaceContext } from "@liexp/backend/lib/context/space.context.js"; +import { type URLMetadataContext } from "@liexp/backend/lib/context/urlMetadata.context.js"; import { type WikipediaProvider } from "@liexp/backend/lib/providers/wikipedia/wikipedia.provider.js"; import { type ServerBlockNoteEditor } from "@liexp/shared/lib/providers/blocknote/ssr.js"; import { type HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; -import { type PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; import { type AppConfig } from "#app/config.js"; import { type ENV } from "#io/ENV.js"; @@ -24,10 +23,6 @@ export interface ENVContext { env: ENV; } -interface PDFProviderContext { - pdf: PDFProvider; -} - interface HTTPProviderContext { http: HTTPProvider; } @@ -46,7 +41,6 @@ export type ServerContext = ENVContext & LoggerContext & SpaceContext & FSClientContext & - PDFProviderContext & HTTPProviderContext & WikipediaProviderContext & NERProviderContext & diff --git a/services/api/src/context/index.ts b/services/api/src/context/index.ts index 957d29d356..5f4521f2a2 100644 --- a/services/api/src/context/index.ts +++ b/services/api/src/context/index.ts @@ -1,3 +1,4 @@ +import * as fs from "fs"; import * as path from "path"; import { MakeURLMetadata } from "@liexp/backend/lib/providers/URLMetadata.provider.js"; import { GetFFMPEGProvider } from "@liexp/backend/lib/providers/ffmpeg/ffmpeg.provider.js"; @@ -8,7 +9,8 @@ import { GetNERProvider } from "@liexp/backend/lib/providers/ner/ner.provider.js import { GetTypeORMClient } from "@liexp/backend/lib/providers/orm/index.js"; import { GetPuppeteerProvider } from "@liexp/backend/lib/providers/puppeteer.provider.js"; import { GetQueueProvider } from "@liexp/backend/lib/providers/queue.provider.js"; -import { createS3Provider } from "@liexp/backend/lib/providers/space/creates3.provider.js"; +import { createS3ProviderConfig } from "@liexp/backend/lib/providers/space/creates3ProviderConfig.js"; +import { MakeSpaceProvider } from "@liexp/backend/lib/providers/space/space.provider.js"; import { WikipediaProvider } from "@liexp/backend/lib/providers/wikipedia/wikipedia.provider.js"; import { getDataSource, @@ -21,7 +23,6 @@ import { fromEndpoints } from "@liexp/shared/lib/providers/EndpointsRESTClient/E import { APIRESTClient } from "@liexp/shared/lib/providers/api-rest.provider.js"; import { editor } from "@liexp/shared/lib/providers/blocknote/ssr.js"; import { HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; -import { PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; import * as axios from "axios"; import ffmpeg from "fluent-ffmpeg"; import { sequenceS } from "fp-ts/lib/Apply.js"; @@ -29,7 +30,6 @@ import { type TaskEither } from "fp-ts/lib/TaskEither.js"; import { Redis } from "ioredis"; import MW from "nodemw"; import metadataParser from "page-metadata-parser"; -import * as pdf from "pdfjs-dist/legacy/build/pdf.mjs"; import * as puppeteer from "puppeteer-core"; import { type VanillaPuppeteer } from "puppeteer-extra"; import WinkFn from "wink-nlp"; @@ -88,7 +88,7 @@ export const makeContext = }), }); - const fsClient = GetFSClient(); + const fsClient = GetFSClient({ client: fs }); const jwtClient = GetJWTProvider({ secret: env.JWT_SECRET, @@ -115,24 +115,12 @@ export const makeContext = sequenceS(fp.TE.ApplicativePar)({ logger: fp.TE.right(serverLogger), db, - s3: fp.TE.right(createS3Provider(env)), + s3: fp.TE.right(MakeSpaceProvider(createS3ProviderConfig(env))), fs: fp.TE.right(fsClient), jwt: fp.TE.right(jwtClient), urlMetadata: fp.TE.right(urlMetadataClient), env: fp.TE.right(env), blocknote: fp.TE.right(editor), - // tg: pipe( - // TGBotProvider( - // { logger: serverLogger }, - // { - // token: env.TG_BOT_TOKEN, - // chat: env.TG_BOT_CHAT, - // polling: env.TG_BOT_POLLING, - // baseApiUrl: env.TG_BOT_BASE_API_URL, - // }, - // ), - // fp.TE.right, - // ), puppeteer: fp.TE.right( GetPuppeteerProvider( puppeteer as any as VanillaPuppeteer, @@ -150,7 +138,6 @@ export const makeContext = apiKey: env.GEO_CODE_API_KEY, }), ), - pdf: fp.TE.right(PDFProvider({ client: pdf })), wp: fp.TE.right(wpProvider), rw: fp.TE.right(rationalWikiProvider), queue: fp.TE.right(GetQueueProvider(fsClient, config.dirs.temp.queue)), diff --git a/services/api/src/flows/events/scientific-studies/createFromPlainObject.flow.ts b/services/api/src/flows/events/scientific-studies/createFromPlainObject.flow.ts index a74f3bc8a2..76b95acd8c 100644 --- a/services/api/src/flows/events/scientific-studies/createFromPlainObject.flow.ts +++ b/services/api/src/flows/events/scientific-studies/createFromPlainObject.flow.ts @@ -1,18 +1,19 @@ import { EventV2Entity } from "@liexp/backend/lib/entities/Event.v2.entity.js"; import { type KeywordEntity } from "@liexp/backend/lib/entities/Keyword.entity.js"; import { type MediaEntity } from "@liexp/backend/lib/entities/Media.entity.js"; +import { type UserEntity } from "@liexp/backend/lib/entities/User.entity.js"; import { pipe } from "@liexp/core/lib/fp/index.js"; import { UUID } from "@liexp/shared/lib/io/http/Common/index.js"; -import { type CreateScientificStudyPlainBody } from "@liexp/shared/lib/io/http/Events/ScientificStudy.js"; +import { type CreateScientificStudyBody } from "@liexp/shared/lib/io/http/Events/ScientificStudy.js"; import * as TE from "fp-ts/lib/TaskEither.js"; import { type DeepPartial, Equal } from "typeorm"; import { type TEReader } from "#flows/flow.types.js"; export const createScientificStudyFromPlainObject = - ({ - payload, - ...body - }: CreateScientificStudyPlainBody): TEReader => + ( + { payload, ...body }: CreateScientificStudyBody, + user: UserEntity, + ): TEReader => (ctx) => { const scientificStudyData = { ...body, @@ -53,6 +54,7 @@ export const createScientificStudyFromPlainObject = ctx.db.save(EventV2Entity, [ { ...scientificStudyData, + user, }, ]), TE.chain(([result]) => diff --git a/services/api/src/flows/events/scientific-studies/createScientificStudy.flow.ts b/services/api/src/flows/events/scientific-studies/createScientificStudy.flow.ts index 7b7dc17ced..04e245f9fe 100644 --- a/services/api/src/flows/events/scientific-studies/createScientificStudy.flow.ts +++ b/services/api/src/flows/events/scientific-studies/createScientificStudy.flow.ts @@ -1,27 +1,22 @@ import { type EventV2Entity } from "@liexp/backend/lib/entities/Event.v2.entity.js"; -import { UserEntity } from "@liexp/backend/lib/entities/User.entity.js"; -import { createEventFromURL } from "@liexp/backend/lib/flows/event/scientific-study/createFromURL.flow.js"; +import { UserRepository } from "@liexp/backend/lib/services/entity-repository.service.js"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; -import { CreateScientificStudyBody } from "@liexp/shared/lib/io/http/Events/ScientificStudy.js"; +import { type ScientificStudy } from "@liexp/shared/lib/io/http/Events/index.js"; +import { Equal } from "typeorm"; import { createScientificStudyFromPlainObject } from "./createFromPlainObject.flow.js"; import { type TEReader } from "#flows/flow.types.js"; import { ensureUserExists } from "#utils/user.utils.js"; export const createScientificStudy = ( - body: CreateScientificStudyBody, + body: ScientificStudy.CreateScientificStudyBody, req: Express.Request, ): TEReader => { - if (CreateScientificStudyBody.types[1].is(body)) { - return pipe( - ensureUserExists(req.user), - fp.RTE.fromEither, - fp.RTE.map((u) => { - const user = new UserEntity(); - user.id = u.id; - return user; - }), - fp.RTE.chain((u) => createEventFromURL(u, body.url)), - ); - } - return createScientificStudyFromPlainObject(body); + return pipe( + ensureUserExists(req.user), + fp.RTE.fromEither, + fp.RTE.chain((u) => + UserRepository.findOneOrFail({ where: { id: Equal(u.id) } }), + ), + fp.RTE.chain((u) => createScientificStudyFromPlainObject(body, u)), + ); }; diff --git a/services/api/src/flows/media/editMedia.flow.ts b/services/api/src/flows/media/editMedia.flow.ts index 10470657a4..1a8b6c5606 100644 --- a/services/api/src/flows/media/editMedia.flow.ts +++ b/services/api/src/flows/media/editMedia.flow.ts @@ -77,17 +77,20 @@ export const editMedia = ( thumbnail: undefined, id, }), - fp.RTE.map(() => undefined), + fp.RTE.map(() => null), ), ) : O.isSome(transferThumbnail) && m.thumbnail - ? MediaPubSub.TransferMediaFromExternalProviderPubSub.publish({ - mediaId: m.id, - url: m.thumbnail, - fileName: `${m.id}-thumb`, - mimeType: m.type, - }) - : fp.RTE.right(0), + ? pipe( + MediaPubSub.TransferMediaFromExternalProviderPubSub.publish({ + mediaId: m.id, + url: m.thumbnail, + fileName: `${m.id}-thumb`, + mimeType: m.type, + }), + fp.RTE.map(() => m.thumbnail), + ) + : fp.RTE.right(fp.O.getOrElse(() => m.thumbnail)(thumbnail)), ), fp.RTE.bind("location", ({ media }) => O.isSome(transfer) @@ -102,13 +105,14 @@ export const editMedia = ( ) : fp.RTE.right(location), ), - fp.RTE.chain(({ media, location }) => + fp.RTE.chain(({ media, location, thumbnail }) => pipe( MediaRepository.save([ { ...media, ...body, location, + thumbnail, keywords: body.keywords.map((id) => ({ id })), links: body.links.map((id) => ({ id })), events: body.events.map((id) => ({ diff --git a/services/api/src/io/ControllerError.ts b/services/api/src/io/ControllerError.ts index 6bbdde6a95..aee176c91e 100644 --- a/services/api/src/io/ControllerError.ts +++ b/services/api/src/io/ControllerError.ts @@ -9,7 +9,7 @@ import { type FSError } from "@liexp/backend/lib/providers/fs/fs.provider.js"; import { JWTError } from "@liexp/backend/lib/providers/jwt/jwt.provider.js"; import { type NERError } from "@liexp/backend/lib/providers/ner/ner.provider.js"; import { DBError } from "@liexp/backend/lib/providers/orm/index.js"; -import { RedisError } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { RedisError } from "@liexp/backend/lib/providers/redis/redis.error.js"; import { SpaceError } from "@liexp/backend/lib/providers/space/space.provider.js"; import { fp } from "@liexp/core/lib/fp/index.js"; import { diff --git a/services/api/src/routes/admin/images/buildImage.controller.ts b/services/api/src/routes/admin/images/buildImage.controller.ts index 70bd4b177a..efe1f0c69f 100644 --- a/services/api/src/routes/admin/images/buildImage.controller.ts +++ b/services/api/src/routes/admin/images/buildImage.controller.ts @@ -1,4 +1,4 @@ -import { buildImageWithSharp } from "@liexp/backend/lib/flows/media/admin/build-image/buildImageWithSharp.flow.js"; +import { BuildImageWithSharpPubSub } from "@liexp/backend/lib/pubsub/buildImageWithSharp.pubSub.js"; import { pipe } from "@liexp/core/lib/fp/index.js"; import { Endpoints } from "@liexp/shared/lib/endpoints/index.js"; import { type BuildImageLayer } from "@liexp/shared/lib/io/http/admin/BuildImage.js"; @@ -29,9 +29,9 @@ export const MakeAdminBuildImageRoute: Route = (r, ctx) => { layers.push(watermarkLayer); } return pipe( - buildImageWithSharp(layers)(ctx), - TE.map((buffer) => ({ - body: buffer.toString("base64"), + BuildImageWithSharpPubSub.publish({ image: null, layers })(ctx), + TE.map(() => ({ + body: { success: true }, statusCode: 201, })), ); diff --git a/services/api/src/routes/events/__tests__/searchEvents.e2e.ts b/services/api/src/routes/events/__tests__/searchEvents.e2e.ts index 4921b312d2..de4ee16b64 100644 --- a/services/api/src/routes/events/__tests__/searchEvents.e2e.ts +++ b/services/api/src/routes/events/__tests__/searchEvents.e2e.ts @@ -8,7 +8,7 @@ import { UncategorizedArb } from "@liexp/shared/lib/tests/arbitrary/Event.arbitr import { GroupArb } from "@liexp/shared/lib/tests/arbitrary/Group.arbitrary.js"; import { GroupMemberArb } from "@liexp/shared/lib/tests/index.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; -import { fc } from "@liexp/test"; +import { fc } from "@liexp/test/lib/index.js"; import * as A from "fp-ts/lib/Array.js"; import jwt from "jsonwebtoken"; import { GetAppTest, type AppTest } from "../../../../test/AppTest.js"; diff --git a/services/api/src/routes/events/createEvent.controller.ts b/services/api/src/routes/events/createEvent.controller.ts index 1f41ba8476..1ee0da29bc 100644 --- a/services/api/src/routes/events/createEvent.controller.ts +++ b/services/api/src/routes/events/createEvent.controller.ts @@ -1,21 +1,56 @@ import { EventV2Entity } from "@liexp/backend/lib/entities/Event.v2.entity.js"; import { EventV2IO } from "@liexp/backend/lib/io/event/eventV2.io.js"; +import { CreateEventFromURLPubSub } from "@liexp/backend/lib/pubsub/events/createEventFromURL.pubSub.js"; import { createEventQuery } from "@liexp/backend/lib/queries/events/createEvent.query.js"; +import { UserRepository } from "@liexp/backend/lib/services/entity-repository.service.js"; import { LoggerService } from "@liexp/backend/lib/services/logger/logger.service.js"; import { pipe } from "@liexp/core/lib/fp/index.js"; import { Endpoints } from "@liexp/shared/lib/endpoints/index.js"; +import { uuid } from "@liexp/shared/lib/io/http/Common/UUID.js"; +import { EventFromURLBody } from "@liexp/shared/lib/io/http/Events/index.js"; +import { AdminCreate } from "@liexp/shared/lib/io/http/User.js"; import * as TE from "fp-ts/lib/TaskEither.js"; -import { Equal } from "typeorm"; +import { type DeepPartial, Equal } from "typeorm"; import { AddEndpoint } from "#routes/endpoint.subscriber.js"; import { type Route } from "#routes/route.types.js"; -import { authenticationHandler } from "#utils/authenticationHandler.js"; +import { + authenticationHandler, + RequestDecoder, +} from "#utils/authenticationHandler.js"; export const CreateEventRoute: Route = (r, ctx) => { AddEndpoint(r, authenticationHandler(["admin:create"])(ctx))( Endpoints.Event.Create, - ({ body }) => { + ({ body }, req) => { return pipe( - createEventQuery(body)(ctx), + RequestDecoder.decodeUserFromRequest(req, [AdminCreate.value])(ctx), + TE.fromIOEither, + TE.chain((u) => + UserRepository.findOneOrFail({ where: { id: Equal(u.id) } })(ctx), + ), + TE.chain((user) => + EventFromURLBody.is(body) + ? pipe( + uuid(), + TE.right, + TE.chainFirst((id) => + CreateEventFromURLPubSub.publish({ + ...body, + eventId: id, + userId: user.id, + })(ctx), + ), + TE.map( + (id) => + ({ + id, + type: body.type, + date: new Date(), + }) as DeepPartial, + ), + ) + : createEventQuery(body)(ctx), + ), LoggerService.TE.debug(ctx, "Create data %O"), TE.chain((data) => ctx.db.save(EventV2Entity, [data])), TE.chain(([event]) => diff --git a/services/api/src/routes/events/scientific-study/__tests__/createScientificStudy.e2e.ts b/services/api/src/routes/events/scientific-study/__tests__/createScientificStudy.e2e.ts index 445396fa4d..23a656561f 100644 --- a/services/api/src/routes/events/scientific-study/__tests__/createScientificStudy.e2e.ts +++ b/services/api/src/routes/events/scientific-study/__tests__/createScientificStudy.e2e.ts @@ -17,7 +17,6 @@ import { GroupArb } from "@liexp/shared/lib/tests/arbitrary/Group.arbitrary.js"; import { HumanReadableStringArb } from "@liexp/shared/lib/tests/arbitrary/HumanReadableString.arbitrary.js"; import { LinkArb } from "@liexp/shared/lib/tests/index.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; -import { sanitizeURL } from "@liexp/shared/lib/utils/url.utils.js"; import { fc } from "@liexp/test"; import { In } from "typeorm"; import { GetAppTest, type AppTest } from "../../../../../test/AppTest.js"; @@ -82,87 +81,6 @@ describe("Create Scientific Study", () => { await appTest.utils.e2eAfterAll(); }); - test("Should create a scientific study from url", async () => { - const [url] = fc - .sample(fc.nat(), 1) - .map((id) => `https://www.sciencedirect.com/article/${id}` as any); - - const title = fc.sample(HumanReadableStringArb(), 1)[0]; - const description = fc.sample(HumanReadableStringArb(), 1)[0]; - - const scientificStudyData = { url }; - - appTest.mocks.redis.publish.mockResolvedValue(1); - appTest.mocks.urlMetadata.fetchMetadata.mockResolvedValue({ - title, - description, - url: scientificStudyData.url, - keywords: [], - }); - - appTest.mocks.puppeteer.page.goto.mockResolvedValueOnce(undefined); - - // evaluate title - appTest.mocks.puppeteer.page.$eval.mockResolvedValueOnce(title); - // evaluate dropdown click - appTest.mocks.puppeteer.page.click.mockResolvedValueOnce(undefined); - // evaluate date string - appTest.mocks.puppeteer.page.$eval.mockResolvedValueOnce([ - "Received 27 July 2020", - "Accepted 1 August 2020", - ]); - // wait for - appTest.mocks.puppeteer.page.waitForSelector.mockResolvedValueOnce( - undefined, - ); - appTest.mocks.puppeteer.page.$$.mockResolvedValueOnce([ - { - evaluate: vi.fn().mockResolvedValue(description), - }, - ]); - - appTest.mocks.puppeteer.page.$eval.mockResolvedValueOnce("page content"); - - appTest.mocks.ner.winkMethods.learnCustomEntities.mockResolvedValueOnce( - {} as any, - ); - appTest.mocks.ner.doc.out.mockReturnValue([]); - appTest.mocks.ner.doc.sentences.mockReturnValue({ each: vi.fn() } as any); - appTest.mocks.ner.doc.customEntities.mockReturnValue({ - out: vi.fn().mockReturnValue([]), - } as any); - appTest.mocks.ner.doc.tokens.mockReturnValue({ each: vi.fn() } as any); - - const response = await appTest.req - .post(`/v1/scientific-studies`) - .set("Authorization", authorizationToken) - .send(scientificStudyData); - - const body = response.body.data; - expect(response.status).toEqual(201); - - expect(appTest.mocks.ner).toHaveBeenCalledTimes(1); - expect( - appTest.mocks.ner.winkMethods.learnCustomEntities, - ).toHaveBeenCalledTimes(1); - expect(appTest.mocks.ner.winkMethods.readDoc).toHaveBeenCalledTimes(1); - expect(appTest.mocks.ner.doc.out).toHaveBeenCalledTimes(1); - - const link = await pipe( - appTest.ctx.db.findOneOrFail(LinkEntity, { - where: { url: sanitizeURL(scientificStudyData.url) }, - }), - throwTE, - ); - - expect(body.type).toBe(SCIENTIFIC_STUDY.value); - expect(body.date).toBeDefined(); - expect(body.payload.url).toEqual(link.id); - expect(body.payload.title).toEqual(title); - - scientificStudyIds.push(body.id); - }); - test("Should create a scientific study from plain object", async () => { const [link] = await pipe( fc.sample(LinkArb, 1)[0], diff --git a/services/api/src/routes/events/scientific-study/extractScientificStudyFromUrl.controller.ts b/services/api/src/routes/events/scientific-study/extractScientificStudyFromUrl.controller.ts index c19fbcbb98..2dcde9af26 100644 --- a/services/api/src/routes/events/scientific-study/extractScientificStudyFromUrl.controller.ts +++ b/services/api/src/routes/events/scientific-study/extractScientificStudyFromUrl.controller.ts @@ -1,7 +1,7 @@ import { EventV2Entity } from "@liexp/backend/lib/entities/Event.v2.entity.js"; import { EventV2IO } from "@liexp/backend/lib/io/event/eventV2.io.js"; -import { CreateScientificStudyFromURLPubSub } from "@liexp/backend/lib/pubsub/events/scientific-study/createFromURL.pubSub.js"; -import { pipe } from "@liexp/core/lib/fp/index.js"; +import { CreateEventFromURLPubSub } from "@liexp/backend/lib/pubsub/events/createEventFromURL.pubSub.js"; +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { Endpoints } from "@liexp/shared/lib/endpoints/index.js"; import { SCIENTIFIC_STUDY } from "@liexp/shared/lib/io/http/Events/EventType.js"; import { @@ -13,7 +13,10 @@ import * as TE from "fp-ts/lib/TaskEither.js"; import { Equal } from "typeorm"; import { AddEndpoint } from "#routes/endpoint.subscriber.js"; import { type Route } from "#routes/route.types.js"; -import { authenticationHandler } from "#utils/authenticationHandler.js"; +import { + authenticationHandler, + RequestDecoder, +} from "#utils/authenticationHandler.js"; export const MakeExtractScientificStudyFromURLRoute: Route = (r, ctx) => { AddEndpoint( @@ -25,17 +28,27 @@ export const MakeExtractScientificStudyFromURLRoute: Route = (r, ctx) => { ])(ctx), )( Endpoints.ScientificStudy.Custom.ExtractFromURL, - ({ params: { id } }, req) => { return pipe( - ctx.db.findOneOrFail(EventV2Entity, { where: { id: Equal(id) } }), - TE.chainFirst((event) => - CreateScientificStudyFromURLPubSub.publish({ + TE.Do, + TE.bind("event", () => + ctx.db.findOneOrFail(EventV2Entity, { where: { id: Equal(id) } }), + ), + TE.bind("user", () => + pipe( + RequestDecoder.decodeUserFromRequest(req, [AdminCreate.value])(ctx), + fp.TE.fromIOEither, + ), + ), + TE.chainFirst(({ user, event }) => + CreateEventFromURLPubSub.publish({ type: SCIENTIFIC_STUDY.value, url: (event.payload as any).url, + eventId: event.id, + userId: user.id, })(ctx), ), - TE.chainEitherK(EventV2IO.decodeSingle), + TE.chainEitherK(({ event }) => EventV2IO.decodeSingle(event)), TE.map((data) => ({ body: { data, diff --git a/services/api/src/routes/media/__tests__/createMedia.e2e.ts b/services/api/src/routes/media/__tests__/createMedia.e2e.ts index 35841f9c58..5300f20675 100644 --- a/services/api/src/routes/media/__tests__/createMedia.e2e.ts +++ b/services/api/src/routes/media/__tests__/createMedia.e2e.ts @@ -42,7 +42,6 @@ describe("Create Media", () => { Test.mocks.puppeteer.page.goto.mockClear(); Test.mocks.puppeteer.page.waitForSelector.mockClear(); Test.mocks.puppeteer.page.$eval.mockClear(); - Test.mocks.sharp.mockClear(); Test.mocks.redis.publish.mockClear(); mockClear(sharpMock); }); diff --git a/services/api/src/routes/open-graph/getMetadata.route.ts b/services/api/src/routes/open-graph/getMetadata.route.ts index 2b78307443..7fb96df449 100644 --- a/services/api/src/routes/open-graph/getMetadata.route.ts +++ b/services/api/src/routes/open-graph/getMetadata.route.ts @@ -33,7 +33,7 @@ export const MakeGetMetadataRoute: Route = (r, ctx) => { date: link.value.publishDate?.toISOString() ?? undefined, title: link.value.title, description: link.value.description ?? link.value.title, - keywords: link.value.keywords.map((id) => id.id) ?? [], + keywords: link.value.keywords?.map((id) => id.id) ?? [], icon: "", image: link.value.image?.location ?? null, provider: link.value.provider ?? "", diff --git a/services/api/src/run.ts b/services/api/src/run.ts index 657835babd..18a9d71a37 100644 --- a/services/api/src/run.ts +++ b/services/api/src/run.ts @@ -33,6 +33,14 @@ const run = (): Promise => { })), TE.mapLeft(ControllerError.report), TE.chain(({ ctx, app }) => { + // TODO: handle properly a possible error thrown by mkdirSync + [ + ...Object.values(ctx.config.dirs.config), + ...Object.values(ctx.config.dirs.temp), + ].forEach((folder) => { + ctx.fs._fs.mkdirSync(folder, { recursive: true }); + }); + const server = app.listen( ctx.env.SERVER_PORT, ctx.env.SERVER_HOST, diff --git a/services/api/test/AppTest.ts b/services/api/test/AppTest.ts index d02c434a19..49d2a4be1f 100644 --- a/services/api/test/AppTest.ts +++ b/services/api/test/AppTest.ts @@ -17,7 +17,6 @@ import { ENV } from "#io/ENV.js"; import { GetFFMPEGProvider } from "@liexp/backend/lib/providers/ffmpeg/ffmpeg.provider.js"; import { GetFSClient } from "@liexp/backend/lib/providers/fs/fs.provider.js"; import { GeocodeProvider } from "@liexp/backend/lib/providers/geocode/geocode.provider.js"; -import { MakeImgProcClient } from "@liexp/backend/lib/providers/imgproc/imgproc.provider.js"; import { GetJWTProvider } from "@liexp/backend/lib/providers/jwt/jwt.provider.js"; import { GetNERProvider } from "@liexp/backend/lib/providers/ner/ner.provider.js"; import { GetTypeORMClient } from "@liexp/backend/lib/providers/orm/index.js"; @@ -25,7 +24,6 @@ import { GetPuppeteerProvider } from "@liexp/backend/lib/providers/puppeteer.pro import { MakeSpaceProvider } from "@liexp/backend/lib/providers/space/space.provider.js"; import { GetLogger, Logger } from "@liexp/core/lib/logger/index.js"; import { HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; -import { PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; import { AxiosInstance } from "axios"; import { sequenceS, sequenceT } from "fp-ts/lib/Apply.js"; @@ -36,7 +34,7 @@ import path from "path"; import supertest from "supertest"; import type TestAgent from "supertest/lib/agent.js"; import { vi } from "vitest"; -import { AppMocks, mocks } from "@liexp/backend/lib/test/mocks.js"; +import { DepsMocks, mocks } from "@liexp/backend/lib/test/mocks.js"; import { getDataSource, getORMConfig, @@ -57,7 +55,7 @@ vi.mock("node-telegram-bot-api"); export interface AppTest { ctx: ServerContext; - mocks: AppMocks; + mocks: DepsMocks; req: TestAgent; utils: { e2eAfterAll: () => Promise; @@ -80,7 +78,7 @@ export const loadAppContext = async ( ), }), TE.map(({ db, env }) => { - const config = Config(env, path.resolve(__dirname, "..")) + const config = Config(env, path.resolve(__dirname, "../temp")) return ({ env, @@ -94,10 +92,8 @@ export const loadAppContext = async ( { headless: "shell" }, mocks.puppeteer.devices, ), - tg: mocks.tg, s3: MakeSpaceProvider(mocks.s3 as any), - ig: mocks.ig, - fs: GetFSClient(), + fs: GetFSClient({ client: mocks.fs }), wp: mocks.wiki, rw: mocks.wiki, urlMetadata: { @@ -115,11 +111,6 @@ export const loadAppContext = async ( }, }, http: HTTPProvider(mocks.axios as any as AxiosInstance), - imgProc: MakeImgProcClient({ - logger, - exifR: mocks.exifR, - client: mocks.sharp as any, - }), ner: GetNERProvider({ logger, entitiesFile: path.resolve(config.dirs.config.nlp, "entities.json"), @@ -129,7 +120,6 @@ export const loadAppContext = async ( openai: {} as any, blocknote: {} as any, redis: mocks.redis, - pdf: PDFProvider({ client: {} as any }), geo: GeocodeProvider({ http: HTTPProvider(mocks.axios as any), apiKey: "fake-geo-api-key", diff --git a/services/api/test/GetDockerContainer.ts b/services/api/test/GetDockerContainer.ts index 73c53f4dde..6ac19abd39 100644 --- a/services/api/test/GetDockerContainer.ts +++ b/services/api/test/GetDockerContainer.ts @@ -37,9 +37,8 @@ type GetDockerContainer = ( const listDatabases = async (): Promise => { const databases = await fs.readdir(DATABASES_FILE_PATH()); - // console.log("list databases", databases); - return databases; + return databases.filter((f) => DATABASE_RUN_COUNT_FILE_PATH() !== f); }; const readDatabases = async (): Promise> => { @@ -78,8 +77,9 @@ const getFirstFree = async (logger: Logger): Promise => { }; const waitForDatabase = async (logger: Logger): Promise => { - const [interval] = fc.sample(fc.integer({ min: 300, max: 600 }), 1); - return new Promise((resolve) => { + const [interval] = fc.sample(fc.integer({ min: 100, max: 200 }), 1); + return new Promise(async (resolve) => { + const databaseTimer = setInterval(async () => { const freeDatabase = await getFirstFree(logger); @@ -150,134 +150,133 @@ const safeUnlink = async (state?: STATE, db?: string) => { } }; -const GetDockerContainer: GetDockerContainer = - (logger) => (containerName) => { - const docker = new Docker(); +const GetDockerContainer: GetDockerContainer = (logger) => (containerName) => { + const docker = new Docker(); - const lookup = async () => { - const containers = await docker.listContainers({ all: true }); + const lookup = async () => { + const containers = await docker.listContainers({ all: true }); - logger.debug.log( - "Look for %s in %O", - containerName, - containers.map((c) => c.Names), - ); + logger.debug.log( + "Look for %s in %O", + containerName, + containers.map((c) => c.Names), + ); - const containerInfo = containers.find((c) => - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - c.Names.some((n) => n.indexOf(containerName) > 0), - ); + const containerInfo = containers.find((c) => + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + c.Names.some((n) => n.indexOf(containerName) > 0), + ); - if (containerInfo) { - container = docker.getContainer(containerInfo.Id); + if (containerInfo) { + container = docker.getContainer(containerInfo.Id); - return container; - } + return container; + } - throw new Error(`Container ${containerName} not found`); - }; + throw new Error(`Container ${containerName} not found`); + }; - const addDatabases = async (dbCount: number): Promise => { - const currentDatabases = await listDatabases(); + const addDatabases = async (dbCount: number): Promise => { + const currentDatabases = await listDatabases(); - logger.debug.log( - `${currentDatabases.length} databases found, expected ${dbCount}`, - ); + logger.debug.log( + `${currentDatabases.length} databases found, expected ${dbCount}`, + ); - await fs.writeFile(DATABASE_RUN_COUNT_FILE_PATH(), "0"); - - if (currentDatabases.length >= dbCount) { - const databases = await readDatabases(); - await Promise.all( - Object.entries(databases).flatMap(async ([db, isUse]) => { - const promises = []; - if (isUse) { - promises.push(safeUnlink(IN_USE_STATE, db)); - } - promises.push( - fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), ""), - ); - - return promises; - }), - ); - - return currentDatabases; - } + await fs.writeFile(DATABASE_RUN_COUNT_FILE_PATH(), "0"); - container = await lookup(); + if (currentDatabases.length >= dbCount) { + const databases = await readDatabases(); + await Promise.all( + Object.entries(databases).flatMap(async ([db, isUse]) => { + const promises = []; + if (isUse) { + promises.push(safeUnlink(IN_USE_STATE, db)); + } + promises.push(fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), "")); + + return promises; + }), + ); - const databases = fc - .sample(HumanReadableStringArb(), dbCount) - .map((s) => s.toLowerCase().replace(/-/g, "_")); + return currentDatabases; + } - logger.debug.log("adding databases: %s", databases); - await execCommand(container, { - Cmd: [ - "/bin/bash", - "-h", - "/docker-entrypoint-initdb.d/psql-create-database.sh", - ], - Env: [`DBS=${databases.join(",")}`], - AttachStdout: true, - AttachStderr: true, - }); + container = await lookup(); + + const databases = fc + .sample(HumanReadableStringArb(), dbCount) + .map((s) => s.toLowerCase().replace(/-/g, "_")); + + logger.debug.log("adding databases: %s", databases); + await execCommand(container, { + Cmd: [ + "/bin/bash", + "-h", + "/docker-entrypoint-initdb.d/psql-create-database.sh", + ], + Env: [`DBS=${databases.join(",")}`], + AttachStdout: true, + AttachStderr: true, + }); - await Promise.all( - databases.map((db) => - fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), ""), - ), - ); + await Promise.all( + databases.map((db) => + fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), ""), + ), + ); - return databases; - }; + return databases; + }; - const markDatabaseAsUsed = async (database: string) => { - await safeUnlink(IN_USE_STATE, database); - await fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, database), ""); - }; + const markDatabaseAsUsed = async (database: string) => { + await safeUnlink(IN_USE_STATE, database); + await fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, database), ""); + }; - const freeDatabases = async () => { - const databases = await readDatabases(); + const freeDatabases = async () => { + const databases = await readDatabases(); - logger.info.log( - "Resetting databases %d to free %O", - Object.keys(databases).length, - ); + logger.info.log( + "Resetting databases %d to free %O", + Object.keys(databases).length, + ); - await Promise.all( - Object.entries(databases).flatMap(([db, state]) => [ - safeUnlink(state ? IN_USE_STATE : FREE_STATE, db), - fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), ""), - ]), - ); - }; - - const assertLocalCacheFolder = async () => { - try { - await fs.readdir(DATABASES_FILE_PATH(), { recursive: true }); - } catch (e: any) { - if (e.code !== "EEXIST") { - throw e; - } + await Promise.all( + Object.entries(databases).flatMap(([db, state]) => [ + safeUnlink(state ? IN_USE_STATE : FREE_STATE, db), + fs.writeFile(DATABASES_FILE_PATH(FREE_STATE, db), ""), + ]), + ); + }; + + const assertLocalCacheFolder = async () => { + try { + await fs.readdir(DATABASES_FILE_PATH(), { recursive: true }); + } catch (e: any) { + if (e.code !== "EEXIST") { + throw e; } - }; - - return { - lookup, - addDatabases, - waitForDatabase: () => waitForDatabase(logger), - markDatabaseAsUsed, - freeDatabases, - assertLocalCacheFolder, - getRunStats: async () => { - return { - used: await fs.readFile(DATABASE_RUN_COUNT_FILE_PATH(), "utf-8").then((s) => parseInt(s)), - }; - }, - }; + } }; + return { + lookup, + addDatabases, + waitForDatabase: () => waitForDatabase(logger), + markDatabaseAsUsed, + freeDatabases, + assertLocalCacheFolder, + getRunStats: async () => { + return { + used: await fs + .readFile(DATABASE_RUN_COUNT_FILE_PATH(), "utf-8") + .then((s) => parseInt(s)), + }; + }, + }; +}; + export const testDBContainer = GetDockerContainer(GetLogger("dkr"))( "db-test.liexp.dev", ); diff --git a/services/api/test/testSetup.ts b/services/api/test/testSetup.ts index a823d37268..c1d1255093 100644 --- a/services/api/test/testSetup.ts +++ b/services/api/test/testSetup.ts @@ -2,13 +2,8 @@ import { GetLogger } from "@liexp/core/lib/logger/Logger.js"; import { afterAll, beforeAll } from "vitest"; import { type AppTest, initAppTest, loadAppContext } from "./AppTest.js"; import { testDBContainer } from "./GetDockerContainer.js"; -import { upsertNLPEntities } from "@liexp/backend/lib/flows/admin/nlp/upsertEntities.flow.js"; -import { pipe } from "@liexp/core/lib/fp/index.js"; -import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; import D from "debug"; -import { getOlderThanOr } from "@liexp/backend/lib/flows/fs/getOlderThanOr.flow.js"; import { ServerContext } from '../src/context/context.type.js' -import path from 'path'; const logger = GetLogger("testSetup"); @@ -34,16 +29,6 @@ beforeAll(async () => { g.appContext = await loadAppContext(logger); } - const configFile = path.resolve(g.appContext.config.dirs.config.nlp, "entities.json") - - await pipe( - getOlderThanOr( - configFile, - 10, - )(upsertNLPEntities)(g.appContext), - throwTE, - ); - logger.debug.log("app context", !!g.appContext); g.appTest = await initAppTest(g.appContext, process.env.DB_DATABASE!); diff --git a/services/api/test/vitest.config.e2e.ts b/services/api/test/vitest.config.e2e.ts index c69058dc80..7a066476a7 100644 --- a/services/api/test/vitest.config.e2e.ts +++ b/services/api/test/vitest.config.e2e.ts @@ -1,5 +1,8 @@ import { defineProject, mergeConfig } from "vitest/config"; -import { PathnameAlias, baseConfig } from "@liexp/backend/lib/test/vitest.base-config.js"; +import { + PathnameAlias, + baseConfig, +} from "@liexp/backend/lib/test/vitest.base-config.js"; const toAlias = PathnameAlias(import.meta.url); @@ -14,15 +17,15 @@ const config = mergeConfig( setupFiles: [toAlias(`testSetup.ts`)], globalSetup: [toAlias(`globalSetup.ts`)], exclude: ["**/build", "**/src/migrations", "**/src/scripts"], - pool: "threads", + pool: "forks", poolOptions: { - threads: { - singleThread: process.env.CI ? true : false, - isolate: process.env.CI ? true : false, + forks: { + singleFork: process.env.CI === "true" ? true : false, + isolate: false, }, }, }, }), ); -export default config; \ No newline at end of file +export default config; diff --git a/services/api/vitest.workspace.js b/services/api/vitest.workspace.js index 2b651e41e1..8f9cb512c8 100644 --- a/services/api/vitest.workspace.js +++ b/services/api/vitest.workspace.js @@ -1,4 +1 @@ -export default [ - './test/vitest.config.spec.ts', - './test/vitest.config.e2e.ts', -] \ No newline at end of file +export default ["./test/vitest.config.spec.ts", "./test/vitest.config.e2e.ts"]; diff --git a/services/storybook/package.json b/services/storybook/package.json index cfd85d8246..ddc0ff42f1 100644 --- a/services/storybook/package.json +++ b/services/storybook/package.json @@ -29,15 +29,15 @@ "@liexp/test": "workspace:*", "@liexp/ui": "workspace:*", "@mui/material": "^5.16.14", - "@storybook/addon-essentials": "^8.4.6", - "@storybook/addon-interactions": "^8.4.6", - "@storybook/addon-links": "^8.4.6", - "@storybook/builder-vite": "^8.4.6", - "@storybook/manager-api": "^8.4.6", - "@storybook/react": "^8.4.6", - "@storybook/react-vite": "^8.4.6", - "@storybook/theming": "^8.4.6", - "@tanstack/react-query": "^5.63.0", + "@storybook/addon-essentials": "^8.5.0", + "@storybook/addon-interactions": "^8.5.0", + "@storybook/addon-links": "^8.5.0", + "@storybook/builder-vite": "^8.5.0", + "@storybook/manager-api": "^8.5.0", + "@storybook/react": "^8.5.0", + "@storybook/react-vite": "^8.5.0", + "@storybook/theming": "^8.5.0", + "@tanstack/react-query": "^5.64.1", "@visx/gradient": "^3.12.0", "d3": "^7.9.0", "date-fns": "^4.1.0", @@ -46,7 +46,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-virtualized": "^9.22.5", - "storybook": "^8.4.6" + "storybook": "^8.5.0" }, "devDependencies": { "@types/d3": "^7.4.3", @@ -56,10 +56,10 @@ "prettier": "^3.4.2", "serve": "^14.2.4", "typescript": "^5.6.2", - "vite": "^6.0.9", + "vite": "^6.0.11", "vite-plugin-css-injected-by-js": "^3.5.2", "vite-plugin-optimizer": "^1.4.3", "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/services/web/package.json b/services/web/package.json index c59c324486..d8f03a04e3 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -48,7 +48,7 @@ "@liexp/core": "workspace:*", "@liexp/shared": "workspace:*", "@liexp/ui": "workspace:*", - "@tanstack/react-query": "^5.63.0", + "@tanstack/react-query": "^5.64.1", "compression": "^1.7.4", "date-fns": "^4.1.0", "debug": "^4.3.4", @@ -70,17 +70,17 @@ "@types/compression": "^1.7.5", "@types/debug": "^4.1.12", "@types/express": "^4.17.21", - "@types/node": "^22.10.2", + "@types/node": "^22.10.7", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "dotenv": "^16.4.7", "eslint": "^9.18.0", "tsx": "^4.19.2", "typescript": "^5.6.2", - "vite": "^6.0.9", + "vite": "^6.0.11", "vite-plugin-css-injected-by-js": "^3.5.2", "vite-plugin-optimizer": "^1.4.3", "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/services/worker/.env b/services/worker/.env index 9525b75c6f..718a16db97 100644 --- a/services/worker/.env +++ b/services/worker/.env @@ -37,6 +37,7 @@ TEMP_FOLDER_CLEAN_UP_CRON="0 12 * * *" # every day at midnight GENERATE_MISSING_THUMBNAILS_CRON="0 12 * * *" # every day at midnight PROCESS_DONE_JOB_CRON="*/5 * * * *" # every 5 minutes REGENERATE_MEDIA_THUMBNAILS_CRON="20 0 * * *" # At 00:20, every day +UPSERT_NLP_ENTITIES_CRON="*/5 * * * *" # every 5 minutes TG_BOT_TOKEN=not-valid TG_BOT_CHAT=not-valid TG_BOT_USERNAME=not-valid diff --git a/services/worker/.gitignore b/services/worker/.gitignore new file mode 100644 index 0000000000..d6b3ff5e16 --- /dev/null +++ b/services/worker/.gitignore @@ -0,0 +1 @@ +config/nlp/*.json \ No newline at end of file diff --git a/services/api/config/nlp/.gitkeep b/services/worker/config/nlp/.gitkeep similarity index 100% rename from services/api/config/nlp/.gitkeep rename to services/worker/config/nlp/.gitkeep diff --git a/services/worker/package.json b/services/worker/package.json index 7d62e3b6e7..31376f0f70 100644 --- a/services/worker/package.json +++ b/services/worker/package.json @@ -22,10 +22,7 @@ ], "scripts": { "typecheck": "tsc --noEmit", - "build:tsc": "tsc -b tsconfig.build.json", - "build:es": "esbuild --format=cjs --target=node20 --platform=node --bundle --external:canvas --external:sharp --outfile=build/run-esbuild.js build/run.js", - "build": "pnpm build:tsc && pnpm build:es", - "build:ci": "pnpm build:tsc && pnpm build:es:ci", + "build": "tsc -b tsconfig.build.json", "clean": "rm -rf build", "dev": "node --watch build/run.js", "dev:alpha": "DOTENV_CONFIG_PATH=.env.alpha pnpm dev", @@ -50,37 +47,39 @@ "@liexp/core": "workspace:*", "@liexp/shared": "workspace:*", "axios": "^1.7.9", - "canvas": "3.0.1", + "cronstrue": "^2.50.0", + "debug": "^4.4.0", "exifreader": "^4.26.0", "fluent-ffmpeg": "^2.1.2", "fp-ts": "^2.16.9", + "instagram-private-api": "^1.46.1", "io-ts": "^2.2.22", "io-ts-types": "^0.5.19", "ioredis": "^5.4.2", "node-cron": "^3.0.3", "node-telegram-bot-api": "^0.66.0", + "nodemw": "^0.22.0", "page-metadata-parser": "^1.1.4", "parse2-kmz": "^1.0.7", "pdfjs-dist": "^4.10.38", + "prompts": "^2.4.2", "puppeteer-core": "^23.11.1", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2", "sharp": "^0.33.5", "typeorm": "^0.3.20", - "wink-nlp": "^2.3.0" + "wink-eng-lite-web-model": "^1.8.0", + "wink-nlp": "^2.3.0", + "wink-nlp-utils": "^2.1.0" }, "devDependencies": { - "@liexp/test": "workspace:*", "@types/node-cron": "^3.0.11", "dotenv": "^16.4.7", "esbuild": "^0.24.2", "eslint": "^9.18.0", - "prompts": "^2.4.2", - "supertest": "^7.0.0", "tsx": "^4.19.2", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^2.1.8", - "vitest-mock-extended": "^2.0.2" + "vitest": "^3.0.3" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } diff --git a/services/worker/scripts/pkg.sh b/services/worker/scripts/pkg.sh deleted file mode 100755 index 204b049cf0..0000000000 --- a/services/worker/scripts/pkg.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -e -x - -node --experimental-sea-config sea-config.json - -cp $(command -v node) ./build/be-worker - -strip ./build/be-worker - -pnpx postject ./build/be-worker NODE_SEA_BLOB ./build/be-worker.blob \ - --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 - -cp ../../node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js ./build/xhr-sync-worker.js - -cp ../../node_modules/pdfjs-dist/build/pdf.worker.mjs ./build/pdf.worker.mjs \ No newline at end of file diff --git a/services/worker/src/bin/create-from-wikipedia.ts b/services/worker/src/bin/create-from-wikipedia.ts index 5a5d77c5a5..e8e1ba64fd 100644 --- a/services/worker/src/bin/create-from-wikipedia.ts +++ b/services/worker/src/bin/create-from-wikipedia.ts @@ -1,7 +1,6 @@ import { type WikiProviders } from "@liexp/backend/lib/providers/wikipedia/types.js"; import { pipe } from "@liexp/core/lib/fp/index.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; - import prompts from "prompts"; import { fetchActorFromWikipedia } from "../flows/actor/fetchAndCreateActorFromWikipedia.flow.js"; import { fetchAndCreateAreaFromWikipedia } from "../flows/area/fetchAndCreateAreaFromWikipedia.js"; diff --git a/services/worker/src/bin/start-ctx.ts b/services/worker/src/bin/start-ctx.ts index 9bc5717fff..008c129ce6 100644 --- a/services/worker/src/bin/start-ctx.ts +++ b/services/worker/src/bin/start-ctx.ts @@ -4,6 +4,7 @@ import { ENVParser } from "@liexp/shared/lib/utils/env.utils.js"; import { throwTE } from "@liexp/shared/lib/utils/task.utils.js"; import D from "debug"; import { type WorkerContext } from "../context/context.js"; +import { loadImplementation } from "../context/load.js"; import { makeContext } from "../context/make.js"; import { ENV } from "../io/env.js"; @@ -15,10 +16,12 @@ export const startContext = async (env?: any): Promise => { D.enable(process.env.DEBUG ?? "@liexp:*:error"); + process.env.TG_BOT_POLLING = "false"; + return pipe( ENVParser(ENV.decode)({ ...process.env, TG_BOT_POLLING: "false", ...env }), fp.TE.fromEither, - fp.TE.chain(makeContext), + fp.TE.chain((env) => makeContext(env, loadImplementation(env))), throwTE, ); }; diff --git a/services/worker/src/config.ts b/services/worker/src/config.ts index a0e2333062..0641f6a52b 100644 --- a/services/worker/src/config.ts +++ b/services/worker/src/config.ts @@ -1,40 +1,72 @@ -import { mkdirSync } from "fs"; import path from "path"; import { type BEConfig } from "@liexp/backend/lib/context/config.context.js"; +import { type FSClientContext } from "@liexp/backend/lib/context/fs.context.js"; +import { type LoggerContext } from "@liexp/backend/lib/context/logger.context.js"; +import { ensureFolderExists } from "@liexp/backend/lib/flows/fs/ensureFolderExists.flow.js"; import { EventsConfig } from "@liexp/backend/lib/queries/config/index.js"; +import { fp } from "@liexp/core/lib/fp/index.js"; +import { type ReaderTaskEither } from "fp-ts/lib/ReaderTaskEither.js"; +import { pipe } from "fp-ts/lib/function.js"; +import { type WorkerError } from "./io/worker.error.js"; -export type WorkerConfig = BEConfig; +export interface WorkerConfig extends BEConfig { + dirs: BEConfig["dirs"] & { + pdf: { + cMapUrl: string; + standardFontDataUrl: string; + }; + }; +} -export const Config = (cwd: string): WorkerConfig => { - const tempRoot = path.resolve(cwd, "temp"); +export const Config = + ( + cwd: string, + ): ReaderTaskEither => + (ctx) => { + const tempRoot = path.resolve(cwd, "temp"); - const configFolders = { - nlp: path.resolve(cwd, "config", "nlp"), - }; + const pdfJSDistPath = path.resolve(cwd, "../../node_modules/pdfjs-dist/"); + const pdfFolders = { + cMapUrl: path.resolve(pdfJSDistPath, "cmaps").concat(path.sep), + standardFontDataUrl: path + .resolve(pdfJSDistPath, "standard_fonts") + .concat(path.sep), + }; - const tempFolders = { - root: tempRoot, - media: path.resolve(tempRoot, "media"), - nlp: path.resolve(tempRoot, "nlp"), - queue: path.resolve(tempRoot, "queue"), - stats: path.resolve(tempRoot, "stats"), - tg: path.resolve(tempRoot, "tg"), - }; + const configFolders = { + nlp: path.resolve(cwd, "config", "nlp"), + }; - Object.values(tempFolders).forEach((folder) => { - mkdirSync(folder, { recursive: true }); - }); + const tempFolders = { + root: tempRoot, + media: path.resolve(tempRoot, "media"), + nlp: path.resolve(tempRoot, "nlp"), + queue: path.resolve(tempRoot, "queue"), + stats: path.resolve(tempRoot, "stats"), + tg: path.resolve(tempRoot, "tg"), + }; - return { - media: { - thumbnailWidth: 300, - thumbnailHeight: 200, - }, - dirs: { - cwd, - config: configFolders, - temp: tempFolders, - }, - events: EventsConfig, + return pipe( + [ + ...Object.values(configFolders), + ...Object.values(tempFolders), + ...Object.values(pdfFolders), + ], + fp.A.traverse(fp.TE.ApplicativePar)((filePath) => + ensureFolderExists(filePath)(ctx), + ), + fp.TE.map(() => ({ + media: { + thumbnailWidth: 300, + thumbnailHeight: 200, + }, + dirs: { + cwd, + pdf: pdfFolders, + config: configFolders, + temp: tempFolders, + }, + events: EventsConfig, + })), + ); }; -}; diff --git a/services/worker/src/context/context.ts b/services/worker/src/context/context.ts index d45f580f25..f171a02207 100644 --- a/services/worker/src/context/context.ts +++ b/services/worker/src/context/context.ts @@ -9,7 +9,6 @@ import { type ImgProcClientContext, type TGBotProviderContext, type WikipediaProviderContext, - type URLMetadataContext, type NERProviderContext, } from "@liexp/backend/lib/context/index.js"; import { type LoggerContext } from "@liexp/backend/lib/context/logger.context.js"; @@ -18,6 +17,7 @@ import { type PuppeteerProviderContext } from "@liexp/backend/lib/context/puppet import { type QueuesProviderContext } from "@liexp/backend/lib/context/queue.context.js"; import { type RedisContext } from "@liexp/backend/lib/context/redis.context.js"; import { type SpaceContext } from "@liexp/backend/lib/context/space.context.js"; +import { type URLMetadataContext } from "@liexp/backend/lib/context/urlMetadata.context.js"; import { type WikipediaProvider } from "@liexp/backend/lib/providers/wikipedia/wikipedia.provider.js"; import { type WorkerConfig } from "../config.js"; import { type ENV } from "#io/env.js"; diff --git a/services/worker/src/context/load.ts b/services/worker/src/context/load.ts index 407edcdad7..ccdb82fb9f 100644 --- a/services/worker/src/context/load.ts +++ b/services/worker/src/context/load.ts @@ -1,16 +1,99 @@ +import fs from "fs"; +import { createS3ProviderConfig } from "@liexp/backend/lib/providers/space/creates3ProviderConfig.js"; +import { + getDataSource, + getORMConfig, +} from "@liexp/backend/lib/utils/data-source.js"; import { loadAndParseENV } from "@liexp/core/lib/env/utils.js"; import { ENVParser } from "@liexp/shared/lib/utils/env.utils.js"; +import axios from "axios"; +import Ffmpeg from "fluent-ffmpeg"; import * as TE from "fp-ts/lib/TaskEither.js"; import { pipe } from "fp-ts/lib/function.js"; +import Redis from "ioredis"; +import MW from "nodemw"; +import metadataParser from "page-metadata-parser"; +import * as pdfJs from "pdfjs-dist/legacy/build/pdf.mjs"; +import * as pup from "puppeteer-core"; +import { addExtra, type VanillaPuppeteer } from "puppeteer-extra"; +import puppeteerStealth from "puppeteer-extra-plugin-stealth"; +import sharp from "sharp"; +import WinkFn from "wink-nlp"; import { type WorkerContext } from "./context.js"; -import { makeContext } from "./make.js"; +import { type ContextImplementation, makeContext } from "./make.js"; import { ENV } from "#io/env.js"; import { type WorkerError } from "#io/worker.error.js"; +export const loadImplementation = (env: ENV): ContextImplementation => { + const p = addExtra(pup as any); + p.use(puppeteerStealth()); + return { + redis: { + client: Redis.Redis as any, + }, + pdf: { + client: pdfJs, + }, + imgProc: { + client: () => Promise.resolve(sharp), + }, + ner: { + nlp: { + client: WinkFn, + }, + }, + puppeteer: { + client: p as any as VanillaPuppeteer, + }, + ffmpeg: { + client: Ffmpeg, + }, + urlMetadata: { + client: axios.create(), + parser: { + getMetadata: metadataParser.getMetadata, + }, + }, + wp: { + wiki: new MW({ + protocol: "https", + server: "en.wikipedia.org", + path: "/w", + debug: true, + concurrency: 5, + }), + http: axios.create({ + baseURL: "https://en.wikipedia.org/api/rest_v1", + }), + }, + rw: { + wiki: new MW({ + protocol: "https", + server: "rationalwiki.org", + path: "/w", + debug: true, + concurrency: 5, + }), + http: axios.create({ + baseURL: "https://rationalwiki.org/api/rest_v1", + }), + }, + http: { + client: axios.create(), + }, + geo: { + client: axios.create({ baseURL: env.GEO_CODE_BASE_URL }), + }, + space: createS3ProviderConfig(env), + db: { client: getDataSource(getORMConfig(env, false)) }, + fs: { client: fs }, + }; +}; + export const loadContext = (): TE.TaskEither => { return pipe( loadAndParseENV(ENVParser(ENV.decode))(process.cwd()), TE.fromEither, - TE.chain(makeContext), + TE.chain((env) => makeContext(env, loadImplementation(env))), ); }; diff --git a/services/worker/src/context/make.ts b/services/worker/src/context/make.ts index dc93c87fb2..7824a71df8 100644 --- a/services/worker/src/context/make.ts +++ b/services/worker/src/context/make.ts @@ -1,7 +1,13 @@ import path from "path"; -import { MakeURLMetadata } from "@liexp/backend/lib/providers/URLMetadata.provider.js"; +import { + MakeURLMetadata, + type MakeURLMetadataContext, +} from "@liexp/backend/lib/providers/URLMetadata.provider.js"; import { GetFFMPEGProvider } from "@liexp/backend/lib/providers/ffmpeg/ffmpeg.provider.js"; -import { GetFSClient } from "@liexp/backend/lib/providers/fs/fs.provider.js"; +import { + GetFSClient, + type GetFSClientContext, +} from "@liexp/backend/lib/providers/fs/fs.provider.js"; import { GeocodeProvider } from "@liexp/backend/lib/providers/geocode/geocode.provider.js"; import { IGProvider } from "@liexp/backend/lib/providers/ig/ig.provider.js"; import { MakeImgProcClient } from "@liexp/backend/lib/providers/imgproc/imgproc.provider.js"; @@ -9,107 +15,104 @@ import { GetNERProvider } from "@liexp/backend/lib/providers/ner/ner.provider.js import { GetTypeORMClient } from "@liexp/backend/lib/providers/orm/database.provider.js"; import { GetPuppeteerProvider } from "@liexp/backend/lib/providers/puppeteer.provider.js"; import { GetQueueProvider } from "@liexp/backend/lib/providers/queue.provider.js"; -import { createS3Provider } from "@liexp/backend/lib/providers/space/creates3.provider.js"; +import { RedisClient } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { + MakeSpaceProvider, + type MakeSpaceProviderConfig, +} from "@liexp/backend/lib/providers/space/space.provider.js"; import { TGBotProvider } from "@liexp/backend/lib/providers/tg/tg.provider.js"; import { WikipediaProvider } from "@liexp/backend/lib/providers/wikipedia/wikipedia.provider.js"; -import { - getDataSource, - getORMConfig, -} from "@liexp/backend/lib/utils/data-source.js"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { GetLogger } from "@liexp/core/lib/logger/index.js"; import { editor } from "@liexp/shared/lib/providers/blocknote/ssr.js"; import { HTTPProvider } from "@liexp/shared/lib/providers/http/http.provider.js"; import { PDFProvider } from "@liexp/shared/lib/providers/pdf/pdf.provider.js"; -import * as axios from "axios"; +import type * as axios from "axios"; import ExifReader from "exifreader"; -import ffmpeg from "fluent-ffmpeg"; +import type ffmpeg from "fluent-ffmpeg"; import { sequenceS } from "fp-ts/lib/Apply.js"; import { type TaskEither } from "fp-ts/lib/TaskEither.js"; -import { Redis } from "ioredis"; -import MW from "nodemw"; -import metadataParser from "page-metadata-parser"; +import type { Redis } from "ioredis"; +import TelegramBot from "node-telegram-bot-api"; +import type MW from "nodemw"; +import type * as pdfJS from "pdfjs-dist/legacy/build/pdf.mjs"; import * as puppeteer from "puppeteer-core"; import { type VanillaPuppeteer } from "puppeteer-extra"; import type sharpT from "sharp"; -import WinkFn from "wink-nlp"; +import { type DataSource } from "typeorm"; +import type winkNLP from "wink-nlp"; import { Config } from "../config.js"; import { type WorkerContext } from "./context.js"; import { type ENV } from "#io/env.js"; import { toWorkerError, type WorkerError } from "#io/worker.error.js"; +export interface ContextImplementation { + redis: { client: Redis }; + wp: { wiki: MW; http: axios.AxiosInstance }; + rw: { wiki: MW; http: axios.AxiosInstance }; + urlMetadata: MakeURLMetadataContext; + pdf: { client: typeof pdfJS }; + http: { client: axios.AxiosInstance }; + geo: { client: axios.AxiosInstance }; + imgProc: { client: () => Promise }; + ner: { nlp: { client: typeof winkNLP } }; + puppeteer: { client: VanillaPuppeteer }; + ffmpeg: { client: typeof ffmpeg }; + db: { client: TaskEither }; + space: MakeSpaceProviderConfig; + fs: GetFSClientContext; +} + export const makeContext = ( env: ENV, + impl: ContextImplementation, ): TaskEither => { const serverLogger = GetLogger("worker"); const config = Config(process.cwd()); const db = pipe( - getDataSource(getORMConfig(env, false)), + impl.db.client, fp.TE.chain(GetTypeORMClient), fp.TE.mapLeft(toWorkerError), ); - const fsClient = GetFSClient(); + const fsClient = GetFSClient(impl.fs); const wpProvider = WikipediaProvider({ logger: GetLogger("wp"), - client: new MW({ - protocol: "https", - server: "en.wikipedia.org", - path: "/w", - debug: true, - concurrency: 5, - }), - restClient: axios.default.create({ - baseURL: "https://en.wikipedia.org/api/rest_v1", - }), + client: impl.wp.wiki, + restClient: impl.wp.http, }); const rationalWikiProvider = WikipediaProvider({ logger: GetLogger("rw"), - client: new MW({ - protocol: "https", - server: "rationalwiki.org", - path: "/w", - debug: true, - concurrency: 5, - }), - restClient: axios.default.create({ - baseURL: "https://rationalwiki.org/api/rest_v1", - }), - }); - - const urlMetadataClient = MakeURLMetadata({ - client: axios.default.create({}), - parser: { - getMetadata: metadataParser.getMetadata, - }, + client: impl.rw.wiki, + restClient: impl.rw.http, }); - const redisClient = fp.TE.tryCatch(async () => { - const redis = new Redis(6379, env.REDIS_HOST, { - lazyConnect: true, - }); + const urlMetadataClient = MakeURLMetadata(impl.urlMetadata); - if (env.REDIS_CONNECT) { - await redis.connect(); - } - return redis; - }, toWorkerError); + const redisClient = RedisClient({ + port: 6379, + host: env.REDIS_HOST, + client: impl.redis.client, + }); return pipe( sequenceS(fp.TE.ApplicativePar)({ + env: fp.TE.right(env), logger: fp.TE.right(serverLogger), db, - s3: fp.TE.right(createS3Provider(env)), + s3: fp.TE.right(MakeSpaceProvider(impl.space)), fs: fp.TE.right(fsClient), - env: fp.TE.right(env), redis: redisClient, tg: pipe( TGBotProvider( - { logger: serverLogger }, + { + logger: serverLogger, + client: (token, opts) => new TelegramBot(token, opts), + }, { token: env.TG_BOT_TOKEN, chat: env.TG_BOT_CHAT, @@ -130,55 +133,57 @@ export const makeContext = ( ), urlMetadata: fp.TE.right(urlMetadataClient), puppeteer: fp.TE.right( - GetPuppeteerProvider( - puppeteer as any as VanillaPuppeteer, - {}, - puppeteer.KnownDevices, - ), + GetPuppeteerProvider(impl.puppeteer.client, {}, puppeteer.KnownDevices), ), - ffmpeg: fp.TE.right(GetFFMPEGProvider(ffmpeg)), + ffmpeg: fp.TE.right(GetFFMPEGProvider(impl.ffmpeg.client)), imgProc: pipe( - fp.TE.tryCatch( - (): Promise => - import("sharp").then((imp) => imp.default), - toWorkerError, - ), + fp.TE.tryCatch(() => impl.imgProc.client(), toWorkerError), fp.TE.map((sharp) => MakeImgProcClient({ logger: serverLogger.extend("imgproc"), - client: sharp.bind(sharp), + client: sharp, exifR: ExifReader, }), ), ), - http: fp.TE.right(HTTPProvider(axios.default.create({}))), - pdf: pipe( - fp.TE.tryCatch( - () => import("pdfjs-dist/legacy/build/pdf.mjs"), - toWorkerError, - ), - fp.TE.map((pdf) => PDFProvider({ client: pdf })), - ), - config: fp.TE.right(config), - queue: fp.TE.right(GetQueueProvider(fsClient, config.dirs.temp.queue)), - geo: fp.TE.right( + http: fp.TE.right(HTTPProvider(impl.http.client)), + config: config({ fs: fsClient, logger: serverLogger }), + blocknote: fp.TE.right(editor), + wp: fp.TE.right(wpProvider), + rw: fp.TE.right(rationalWikiProvider), + }), + fp.TE.bind("geo", (ctx) => + fp.TE.right( GeocodeProvider({ - http: HTTPProvider( - axios.default.create({ baseURL: env.GEO_CODE_BASE_URL }), - ), - apiKey: env.GEO_CODE_API_KEY, + http: HTTPProvider(impl.geo.client), + apiKey: ctx.env.GEO_CODE_API_KEY, }), ), - blocknote: fp.TE.right(editor), - ner: fp.TE.right( + ), + fp.TE.bind("ner", (ctx) => + fp.TE.right( GetNERProvider({ logger: serverLogger.extend("ner"), - entitiesFile: path.resolve(process.cwd(), "config/nlp/entities.json"), - nlp: WinkFn, + entitiesFile: path.resolve( + ctx.config.dirs.config.nlp, + "entities.json", + ), + nlp: impl.ner.nlp.client, }), ), - wp: fp.TE.right(wpProvider), - rw: fp.TE.right(rationalWikiProvider), - }), + ), + fp.TE.bind("queue", (ctx) => + fp.TE.right(GetQueueProvider(fsClient, ctx.config.dirs.temp.queue)), + ), + fp.TE.bind("pdf", ({ config }) => + fp.TE.right( + PDFProvider({ + client: impl.pdf.client, + cMapUrl: config.dirs.pdf.cMapUrl, + cMapPacked: true, + standardFontDataUrl: config.dirs.pdf.standardFontDataUrl, + }), + ), + ), ); }; diff --git a/services/worker/src/io/env.ts b/services/worker/src/io/env.ts index 54b3731c1e..ac28a94293 100644 --- a/services/worker/src/io/env.ts +++ b/services/worker/src/io/env.ts @@ -10,6 +10,7 @@ const CRON_ENVS = t.strict( SOCIAL_POSTING_CRON: t.string, PROCESS_DONE_JOB_CRON: t.string, REGENERATE_MEDIA_THUMBNAILS_CRON: t.string, + UPSERT_NLP_ENTITIES_CRON: t.string, }, "CRON_ENVS", ); diff --git a/services/worker/src/io/worker.error.ts b/services/worker/src/io/worker.error.ts index 1ea2c218d3..e5ea9263ff 100644 --- a/services/worker/src/io/worker.error.ts +++ b/services/worker/src/io/worker.error.ts @@ -1,7 +1,7 @@ import { type NotFoundError } from "@liexp/backend/lib/errors/NotFoundError.js"; import { type IOError } from "@liexp/backend/lib/errors/index.js"; import { type DBError } from "@liexp/backend/lib/providers/orm/database.provider.js"; -import { type RedisError } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { type RedisError } from "@liexp/backend/lib/providers/redis/redis.error.js"; import { type SpaceError } from "@liexp/backend/lib/providers/space/space.provider.js"; import { type _DecodeError } from "@liexp/shared/lib/io/http/Error/DecodeError.js"; import { type HTTPError } from "@liexp/shared/lib/providers/http/http.provider.js"; diff --git a/services/worker/src/jobs/jobs.ts b/services/worker/src/jobs/jobs.ts index 771aa69751..e785acdfea 100644 --- a/services/worker/src/jobs/jobs.ts +++ b/services/worker/src/jobs/jobs.ts @@ -8,6 +8,7 @@ import { generateMissingThumbnailsCron } from "./generateMissingMedia.job.js"; import { processOpenAIJobsDone } from "./processOpenAIJobsDone.job.js"; import { regenerateMediaThumbnailJob } from "./regenerateMediaThumbnail.job.js"; import { postOnSocialJob } from "./socialPostScheduler.job.js"; +import { upsertNLPEntitiesJobCron } from "./upsertNLPEntities.js"; import { type WorkerContext } from "#context/context.js"; interface CronJobsHooks { @@ -57,6 +58,12 @@ export const CronJobs = (ctx: WorkerContext): CronJobsHooks => { { name: "REGENERATE_MEDIA_THUMBNAILS", scheduled: true, runOnInit: false }, ); + const upsertNLPEntitiesTask = Cron.schedule( + ctx.env.UPSERT_NLP_ENTITIES_CRON, + liftT(upsertNLPEntitiesJobCron), + { name: "UPSERT_NLP_ENTITIES", scheduled: true, runOnInit: true }, + ); + return { onBootstrap() { Cron.getTasks().forEach((task) => { @@ -75,6 +82,7 @@ export const CronJobs = (ctx: WorkerContext): CronJobsHooks => { generateMissingThumbnailsTask.start(); regenerateMediaThumbnailTask.start(); processOpenAIJobsDoneTask.start(); + upsertNLPEntitiesTask.start(); }, onShutdown() { // stop all tasks diff --git a/services/worker/src/jobs/upsertNLPEntities.ts b/services/worker/src/jobs/upsertNLPEntities.ts new file mode 100644 index 0000000000..b7ea1cb690 --- /dev/null +++ b/services/worker/src/jobs/upsertNLPEntities.ts @@ -0,0 +1,19 @@ +import { upsertNLPEntities as upsertNLPEntitiesFlow } from "@liexp/backend/lib/flows/admin/nlp/upsertEntities.flow.js"; +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; +import { type CronJobTE } from "./cron-task.type.js"; + +export const upsertNLPEntitiesJobCron: CronJobTE = (opts) => { + return pipe( + upsertNLPEntitiesFlow, + fp.RTE.fold( + (e) => (ctx) => { + ctx.logger.error.log("Error processing embeddings queue task %O", e); + return fp.T.of(undefined); + }, + () => (ctx) => { + ctx.logger.info.log("End processing embeddings queue task..."); + return fp.T.of(undefined); + }, + ), + ); +}; diff --git a/services/worker/src/services/subscribers/WorkerSubscribers.ts b/services/worker/src/services/subscribers/WorkerSubscribers.ts index 2b796f17ac..e8ac90a006 100644 --- a/services/worker/src/services/subscribers/WorkerSubscribers.ts +++ b/services/worker/src/services/subscribers/WorkerSubscribers.ts @@ -1,8 +1,10 @@ -import { type Subscriber } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { type Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; import { fp, pipe } from "@liexp/core/lib/fp/index.js"; import { type RTE } from "../../types.js"; +import { CreateEventFromURLSubscriber } from "./event/createEventFromURL.subscriber.js"; import { ExtractMediaExtraSubscriber } from "./media/extractMediaExtra.subscriber.js"; import { GenerateThumbnailSubscriber } from "./media/generateThumbnail.subscriber.js"; +import { TransferFromExternalProviderSubscriber } from "./media/transferFromExternalProvider.subscriber.js"; import { ExtractEntitiesWithNLPSubscriber } from "./nlp/extractEntitiesWithNLP.subscriber.js"; import { PostToSocialPlatformsSubscriber } from "./social-post/PostToSocialPlatforms.subscriber.js"; import { type WorkerContext } from "#context/context.js"; @@ -13,6 +15,9 @@ export const WorkerSubscribers: RTE = (ctx) => { // media GenerateThumbnailSubscriber, ExtractMediaExtraSubscriber, + TransferFromExternalProviderSubscriber, + // event + CreateEventFromURLSubscriber, // social posts PostToSocialPlatformsSubscriber, // admin diff --git a/services/worker/src/services/subscribers/event/createEventFromURL.subscriber.ts b/services/worker/src/services/subscribers/event/createEventFromURL.subscriber.ts new file mode 100644 index 0000000000..d226e3ea53 --- /dev/null +++ b/services/worker/src/services/subscribers/event/createEventFromURL.subscriber.ts @@ -0,0 +1,20 @@ +import { createEventFromURL } from "@liexp/backend/lib/flows/event/createEventFromURL.flow.js"; +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; +import { CreateEventFromURLPubSub } from "@liexp/backend/lib/pubsub/events/createEventFromURL.pubSub.js"; +import { UserRepository } from "@liexp/backend/lib/services/entity-repository.service.js"; +import { fp } from "@liexp/core/lib/fp/index.js"; +import { pipe } from "fp-ts/lib/function.js"; +import { Equal } from "typeorm"; +import { type RTE } from "../../../types.js"; + +export const CreateEventFromURLSubscriber = Subscriber( + CreateEventFromURLPubSub, + (payload): RTE => + pipe( + UserRepository.findOneOrFail({ where: { id: Equal(payload.userId) } }), + fp.RTE.chain((user) => + createEventFromURL(user, payload.eventId, payload.url, payload.type), + ), + fp.RTE.map(() => undefined), + ), +); diff --git a/services/worker/src/services/subscribers/media/extractMediaExtra.subscriber.ts b/services/worker/src/services/subscribers/media/extractMediaExtra.subscriber.ts index 5f14977fcb..7a57a9f244 100644 --- a/services/worker/src/services/subscribers/media/extractMediaExtra.subscriber.ts +++ b/services/worker/src/services/subscribers/media/extractMediaExtra.subscriber.ts @@ -1,6 +1,6 @@ import { type MediaEntity } from "@liexp/backend/lib/entities/Media.entity.js"; import { extractMediaExtra } from "@liexp/backend/lib/flows/media/extra/extractMediaExtra.flow.js"; -import { Subscriber } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; import { ExtractMediaExtraPubSub } from "@liexp/backend/lib/pubsub/media/extractMediaExtra.pubSub.js"; import { MediaRepository } from "@liexp/backend/lib/services/entity-repository.service.js"; import { fp } from "@liexp/core/lib/fp/index.js"; @@ -24,7 +24,7 @@ export const ExtractMediaExtraSubscriber = Subscriber( fp.RTE.chain( ({ media, extra }): RTE => pipe( - MediaRepository.save([{ ...media, extra }]), + MediaRepository.save([{ id: media.id, extra }]), fp.RTE.map((s) => s[0]), ), ), diff --git a/services/worker/src/services/subscribers/media/generateThumbnail.subscriber.ts b/services/worker/src/services/subscribers/media/generateThumbnail.subscriber.ts index 726362aff5..4897b0eb80 100644 --- a/services/worker/src/services/subscribers/media/generateThumbnail.subscriber.ts +++ b/services/worker/src/services/subscribers/media/generateThumbnail.subscriber.ts @@ -1,5 +1,5 @@ import { generateThumbnailFlow } from "@liexp/backend/lib/flows/media/thumbnails/generateThumbnails.flow.js"; -import { Subscriber } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; import { GenerateThumbnailPubSub } from "@liexp/backend/lib/pubsub/media/generateThumbnail.pubSub.js"; import { fp } from "@liexp/core/lib/fp/index.js"; import { pipe } from "fp-ts/lib/function.js"; diff --git a/services/worker/src/services/subscribers/media/transferFromExternalProvider.subscriber.ts b/services/worker/src/services/subscribers/media/transferFromExternalProvider.subscriber.ts new file mode 100644 index 0000000000..a1b822e3a6 --- /dev/null +++ b/services/worker/src/services/subscribers/media/transferFromExternalProvider.subscriber.ts @@ -0,0 +1,23 @@ +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; +import { TransferMediaFromExternalProviderPubSub } from "@liexp/backend/lib/pubsub/media/transferFromExternalProvider.pubSub.js"; +import { MediaRepository } from "@liexp/backend/lib/services/entity-repository.service.js"; +import { fp, pipe } from "@liexp/core/lib/fp/index.js"; +import { transferFromExternalProvider } from "../../../flows/media/transferFromExternalProvider.flow.js"; +import { type RTE } from "../../../types.js"; + +export const TransferFromExternalProviderSubscriber = Subscriber( + TransferMediaFromExternalProviderPubSub, + ({ mediaId, mimeType, url, fileName }): RTE => + pipe( + transferFromExternalProvider(mediaId, url, fileName, mimeType), + fp.RTE.chain((location) => + MediaRepository.save([ + { + id: mediaId, + location, + }, + ]), + ), + fp.RTE.map(() => undefined), + ), +); diff --git a/services/worker/src/services/subscribers/nlp/extractEntitiesWithNLP.subscriber.ts b/services/worker/src/services/subscribers/nlp/extractEntitiesWithNLP.subscriber.ts index a5aae895bc..5637cc80ea 100644 --- a/services/worker/src/services/subscribers/nlp/extractEntitiesWithNLP.subscriber.ts +++ b/services/worker/src/services/subscribers/nlp/extractEntitiesWithNLP.subscriber.ts @@ -1,5 +1,5 @@ import { extractEntitiesFromAnyCached } from "@liexp/backend/lib/flows/admin/nlp/extractEntitiesFromAny.flow.js"; -import { Subscriber } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; import { ExtractEntitiesWithNLP } from "@liexp/backend/lib/pubsub/nlp/extractEntitiesWithNLP.pubSub.js"; import { fp } from "@liexp/core/lib/fp/index.js"; import { pipe } from "fp-ts/lib/function.js"; diff --git a/services/worker/src/services/subscribers/social-post/PostToSocialPlatforms.subscriber.ts b/services/worker/src/services/subscribers/social-post/PostToSocialPlatforms.subscriber.ts index debef1565d..6bd6a202df 100644 --- a/services/worker/src/services/subscribers/social-post/PostToSocialPlatforms.subscriber.ts +++ b/services/worker/src/services/subscribers/social-post/PostToSocialPlatforms.subscriber.ts @@ -1,12 +1,13 @@ -import { Subscriber } from "@liexp/backend/lib/providers/redis/redis.provider.js"; +import { Subscriber } from "@liexp/backend/lib/providers/redis/Subscriber.js"; import { PostToSocialPlatformsPubSub } from "@liexp/backend/lib/pubsub/postToSocialPlatforms.pubSub.js"; import { fp } from "@liexp/core/lib/fp/index.js"; import { pipe } from "fp-ts/lib/function.js"; +import { type RTE } from "../../../types.js"; import { postToSocialPlatforms } from "#flows/social-post/postToPlatforms.flow.js"; export const PostToSocialPlatformsSubscriber = Subscriber( PostToSocialPlatformsPubSub, - (payload) => + (payload): RTE => pipe( postToSocialPlatforms(payload), fp.RTE.map(() => undefined), diff --git a/services/worker/test/WorkerTest.ts b/services/worker/test/WorkerTest.ts index 6fd311c54f..a8e26ee4e1 100644 --- a/services/worker/test/WorkerTest.ts +++ b/services/worker/test/WorkerTest.ts @@ -29,7 +29,7 @@ import * as TE from "fp-ts/lib/TaskEither.js"; import { pipe } from "fp-ts/lib/function.js"; import path from "path"; import { vi } from "vitest"; -import { mocks, type AppMocks } from "@liexp/backend/lib/test/mocks.js"; +import { mocks, type DepsMocks } from "@liexp/backend/lib/test/mocks.js"; import { WorkerContext } from "#context/context.js"; import { getDataSource, @@ -53,7 +53,7 @@ vi.mock("node-telegram-bot-api"); export interface WorkerTest { ctx: WorkerContext; - mocks: AppMocks; + mocks: DepsMocks; utils: { e2eAfterAll: () => Promise; };