diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 0000000000..c326f1cbed --- /dev/null +++ b/.vercelignore @@ -0,0 +1,16 @@ +./.github +./.vscode +./assets +./database +./locales + +# TODO: Ignore /other not all other subfolders + +# ./other + +./promptbook-server +./promptimage-server +./.whitesource +./batch-project-editor.js +./LICENSE +./README.md diff --git a/.vscode/hejny.code-snippets b/.vscode/hejny.code-snippets index 2cff9c97fa..da5d89d8fc 100644 --- a/.vscode/hejny.code-snippets +++ b/.vscode/hejny.code-snippets @@ -1,24 +1,16 @@ { - "test": { - "scope": "typescript", - "prefix": "Test boilerplate", - "description": "Test", - "body": [ - " describe('how $1 works', () => {", - " it('should $1$1__', () => {", - " const $2 = new $1();", - "", - " expect($2.$1).toEqual('$1')", - " });", - " });" - ] - }, "iife": { "scope": "javascript,javascriptreact,typescript,typescriptreact", "prefix": "Immediately Invoked Function Expression", "description": "Immediately Invoked Function Expression", "body": ["((async ()=>{/*Do some stuff*/})())"] }, + "catch": { + "scope": "javascript,javascriptreact,typescript,typescriptreact", + "prefix": "Catch error instanceof Error", + "description": "Immediately Invoked Function Expression", + "body": ["if (!(error instanceof Error)) {", " throw error;", "}"] + }, "eslint-disable": { "scope": "typescript,typescriptreact", "prefix": "Disable ES Lint", @@ -30,5 +22,41 @@ "prefix": "CSS testing outline", "description": "For draw the outline", "body": ["/**/", "outline: 1px dotted red; /**/"] + }, + "test": { + "scope": "typescript", + "prefix": "AI+TDD", + "description": "Test+Implementation ready to AI development", + "body": [ + "import { describe, expect, it } from '@jest/globals';", + "import spaceTrim from 'spacetrim';", + "", + "describe('how $1 works', () => {", + " it('should work with foo', () => {", + " expect(", + " $1(", + " spaceTrim(`", + " Foo", + " `),", + " ),", + " ).toBe(true);", + " });", + "", + " it('should NOT work with bar', () => {", + " expect(", + " $1(", + " spaceTrim(`", + " bar", + " `),", + " ),", + " ).toBe(false);", + " });", + "});", + "", + "function $1(value: string): boolean {", + " return value === 'Foo';", + "}", + "" + ] } } diff --git a/.vscode/terminals.json b/.vscode/terminals.json index 51d8d09ea3..0269a350bd 100644 --- a/.vscode/terminals.json +++ b/.vscode/terminals.json @@ -4,11 +4,21 @@ { "name": "👨🏽‍💻 Develop", "command": "npm run dev", - "focus": true + "focus": false + }, + { + "name": "👨🏽‍💻📖 Run promptbook server", + "commands": ["ts-node ./promptbook-server/server.ts"], + "focus": false + }, + { + "name": "👨🏽‍💻🖼 Run image server", + "commands": ["ts-node ./promptimage-server/server.ts"], + "focus": false }, { "name": "🌎 Expose", - "command": "npx lt --port 4444 --subdomain wizard", + "command": "npx lt --port 4444 --subdomain webgpt", "onlySingle": true, "focus": true }, @@ -20,6 +30,7 @@ { "name": "🩹 Lint fix", "command": "npm run lint -- --fix", + "onlySingle": true, "execute": false }, { @@ -143,26 +154,25 @@ "focus": true }, { - "name": "🧸 Playground", - "commands": ["ts-node ./scripts/playground/playground.ts"], + "name": "🌍 SSH pavolhejny.com", + "command": "ssh root@138.68.100.38", "onlySingle": true, "focus": true }, { - "name": "👊 Kill all 4444", - "commands": ["npx kill-port 4444 "], + "name": "🧸 Playground", + "commands": ["ts-node ./scripts/playground/playground.ts"], "onlySingle": true, "focus": true }, { - "name": "⏫ Trigger Build", - "commands": ["git commit --allow-empty -m \"⏫ Trigger Build\"", "git push"], + "name": "👊 Kill all 4444", + "commands": ["npx kill-port 4444 "], "onlySingle": true, "focus": true }, - { - "name": "👨🏽‍💻 Clean dev cache + Force reinstall of node modules", + "name": "🔓👨🏽‍💻 Clean dev cache + Force reinstall of node modules", "commands": [ "npx kill-port 4444", "rm -rf .next", @@ -174,6 +184,12 @@ "onlySingle": true, "focus": true }, + { + "name": "🔓👨🏽‍💻 Delete git lock", + "commands": ["rm -f .git/index.lock"], + "onlySingle": true, + "focus": true + }, { "name": "👨🏽‍💻 Clean dev cache", "commands": ["npx kill-port 4444", "rm -rf .next"], @@ -208,6 +224,12 @@ "onlySingle": true, "focus": true }, + { + "name": "🔼 Trigger deployment", + "commands": ["git commit --allow-empty -m \"🔼 Trigger deployment\"", "git push"], + "onlySingle": true, + "focus": true + }, { "name": "🔼👑 Release major version", "command": "npm version major", diff --git a/README.md b/README.md index 6ef855853a..f243ca937d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # ⏣ WebGPT +An AI-powered tool for web design https://webgpt.cz/ + +> Do you want to make a web
Or **have a web**? + +![WebGPT](./other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.gif) + + + + diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000000..f1333402ed --- /dev/null +++ b/TODO.md @@ -0,0 +1,28 @@ +## ☑ TODOs + +## Programming goals + +- [ ][🤽‍♀️] Use types not interfaces +- [ ] Try Signals https://youtu.be/SO8lBVWF2Y8?si=kfAjPq3vnxwVKAeH +- [ ] Use template literals functions https://youtu.be/sX4svSMYdt0?si=5ksC3JefXmADzqqB +- [ ] Use 100svh or/and 100dvh or/and 100lvh https://youtu.be/ru3U8MHbFFI?si=LCQBha4cyawUndBW +- [ ] When importing type USE always `import type { ... } from '...'` automatically + Search & replace `import\s+(\{.*\/interfaces\/)` -> `import type $1` works +- [ ] Script for auto-generating fresh unused tags with emojis [👩‍🦱][👩‍🦲][👳‍♂️] + +## Misc + +TODO: Maybe use unstyled components library like https://headlessui.com/ +TODO: Add aria-\* attributes to all elements +TODO: Add things from Ainautes +TODO: Use https://www.npmjs.com/package/next-seo +TODO: Add JSON+LD +TODO: Multiple images providers like Dalle-2, Stable diffusiom, https://skybox.blockadelabs.com/, custom images/photos or non-ml generated images (like abstract art, 3D or fractals) +TODO: Color paletter as standalone product +TODO: Instagram feed (And then shots, YT, tiktok, fb, telegram,...) +TODO: Make logos via ControlNet @see https://www.facebook.com/reel/285666600531866 +TODO: Dynamic pages from CMSs like Wordpress, Drupal, Ghost, Strapi, Contentful, etc +Systems like Notion, Google Docs (@see file:///C:/Users/me/Downloads/e262ded5-27c3-4e4b-92e0-608fcb4ca2c3_Export-47229757-e9f2-4e4a-8fd3-770ded42a53b/The%20AI%20web%20058447887ac94ecb8e645bb108278d61.html) +TODO: [🦺] Maybe we need robots.txt @see https://vercel.com/docs/concepts/functions/edge-functions/og-image-generation + +--- diff --git a/TODO.txt b/TODO.txt deleted file mode 100644 index c73d718799..0000000000 --- a/TODO.txt +++ /dev/null @@ -1,13 +0,0 @@ - -TODO: Maybe use unstyled components library like https://headlessui.com/ -TODO: Add aria-* attributes to all elements -TODO: Add things from Ainautes -TODO: Use https://www.npmjs.com/package/next-seo -TODO: Add JSON+LD -TODO: Multiple images providers like Dalle-2, Stable diffusiom, https://skybox.blockadelabs.com/, custom images/photos or non-ml generated images (like abstract art, 3D or fractals) -TODO: Color paletter as standalone product -TODO: Instagram feed (And then shots, YT, tiktok, fb, telegram,...) -TODO: Make logos via ControlNet @see https://www.facebook.com/reel/285666600531866 -TODO: Dynamic pages from CMSs like Wordpress, Drupal, Ghost, Strapi, Contentful, etc - Systems like Notion, Google Docs (@see file:///C:/Users/me/Downloads/e262ded5-27c3-4e4b-92e0-608fcb4ca2c3_Export-47229757-e9f2-4e4a-8fd3-770ded42a53b/The%20AI%20web%20058447887ac94ecb8e645bb108278d61.html) -TODO: [🦺] Maybe we need robots.txt @see https://vercel.com/docs/concepts/functions/edge-functions/og-image-generation \ No newline at end of file diff --git a/config.ts b/config.ts index fd2897917a..54cbf585ac 100644 --- a/config.ts +++ b/config.ts @@ -1,18 +1,28 @@ import { ConfigChecker } from 'configchecker'; import { Vector } from 'xyzt'; import packageJson from './package.json'; +import type { DallePrompt } from './src/ai/text-to-image/dalle/interfaces/DallePrompt'; import { FULLHD } from './src/constants'; -import { AspectRatioRange } from './src/utils/aspect-ratio/AspectRatioRange'; +import type { AspectRatioRange } from './src/utils/aspect-ratio/AspectRatioRange'; import { expectAspectRatioInRange } from './src/utils/aspect-ratio/expectAspectRatioInRange'; import { DigitalOceanSpaces } from './src/utils/cdn/classes/DigitalOceanSpaces'; import { createColorfulComputeImageColorStats15 } from './src/utils/image/palette/15/createColorfulComputeImageColorStats15'; -import { IComputeImageColorStats } from './src/utils/image/utils/IImageColorStats'; +import type { IComputeImageColorStats } from './src/utils/image/utils/IImageColorStats'; import { isRunningInBrowser } from './src/utils/isRunningInWhatever'; +import { string_font_family } from './src/utils/typeAliases'; import { isUrlOnPrivateNetwork } from './src/utils/validators/isUrlOnPrivateNetwork'; import { validateUuid } from './src/utils/validators/validateUuid'; export const APP_VERSION = packageJson.version; -export const APP_NAME = packageJson.name; +export const APP_NAME = 'WebGPT'; + +export const USE_DALLE_VERSION: 2 | 3 = 3; + +export const USE_DALLE_MODEL_SETTINGS: DallePrompt['modelSettings'] = { + style: 'vivid', + quality: `standard`, + // <- TODO: !! Play with theeese to achieve best results +}; const config = ConfigChecker.from({ ...process.env, @@ -20,11 +30,17 @@ const config = ConfigChecker.from({ // Note: To expose env variables to the browser, using this seemingly strange syntax: // @see https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables#exposing-environment-variables-to-the-browser NEXT_PUBLIC_URL: process.env.NEXT_PUBLIC_URL, + NEXT_PUBLIC_PROMPTBOOK_SERVER_URL: process.env.NEXT_PUBLIC_PROMPTBOOK_SERVER_URL, + NEXT_PUBLIC_IMAGE_SERVER_URL: process.env.NEXT_PUBLIC_IMAGE_SERVER_URL, + NEXT_PUBLIC_OUR_DOMAINS: process.env.NEXT_PUBLIC_OUR_DOMAINS, NEXT_PUBLIC_SUPABASE_URL: process.env.NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, }); export const NEXT_PUBLIC_URL = config.get('NEXT_PUBLIC_URL').url().required().value; +export const NEXT_PUBLIC_PROMPTBOOK_SERVER_URL = config.get('NEXT_PUBLIC_PROMPTBOOK_SERVER_URL').url().required().value; +export const NEXT_PUBLIC_IMAGE_SERVER_URL = config.get('NEXT_PUBLIC_IMAGE_SERVER_URL').url().required().value; + export const IS_DEVELOPMENT = isUrlOnPrivateNetwork( NEXT_PUBLIC_URL, @@ -41,6 +57,8 @@ if (isRunningInBrowser()) { export const NEXT_PUBLIC_DEBUG = config.get('NEXT_PUBLIC_DEBUG').boolean().value; +export const NEXT_PUBLIC_OUR_DOMAINS = config.get('NEXT_PUBLIC_OUR_DOMAINS').list().required().value; + /** * The speed of the animations * It is useful for recording videos @@ -52,6 +70,16 @@ export const NEXT_PUBLIC_DEBUG = config.get('NEXT_PUBLIC_DEBUG').boolean().value */ export const SPEED = 1; // 1 / 5; +/** + * The number of pregenerated photobank images to offer to the user to choose from + */ +export const PHOTOBANK_SEARCH_IMAGES_COUNT = 4; + +/** + * Number of keywords reduction attempts until photobank give up and just pick random images + */ +export const OPTIMIZE_PHOTOBANK_MAX_SEARCH_DEPTH = 5; + export const IS_VERIFIED_EMAIL_REQUIRED = { CREATE: false, EDIT: false, @@ -86,23 +114,23 @@ export const EXPORT_OPTIONS = { publicUrl: NEXT_PUBLIC_URL, }; -export const FONTS = [ +// TODO: [🧠] !! Put fonts into separate file +// TODO: [🧠] !! Breakup the config into multiple files +// TODO: [🧠] !! Better split between FONTS_LIST_STANDARD and FONTS_LIST_EXTENDED + +export const FONTS_LIST_STANDARD = [ // TODO: !! [🧠] Better system for fonts // TODO: Put in separate file //----------[ Manually picked ]--- 'Montserrat', 'Poppins', 'Open Sans', - 'Lobster', 'Playfair Display', - 'Great Vibes', 'Lato', 'Roboto', 'Inter', 'IBM Plex Sans', 'Exo 2', - 'Orbitron', - 'Dancing Script', 'Alegreya', 'Raleway', 'Futura', @@ -111,10 +139,16 @@ export const FONTS = [ 'Cinzel', 'Cinzel Decorative', 'Cormorant Garamond', +]; +export const FONTS_LIST_EXTENDED = [ //----------[ List all ]--- // @see https://github.com/honeysilvas/google-fonts // TODO: This list is not complete (or not up to date) because for example 'Barlow Condensed' is missing + 'Great Vibes', + 'Dancing Script', + 'Lobster', + 'Orbitron', 'ABeeZee', 'Abel', 'Abril Fatface', @@ -824,6 +858,27 @@ export const FONTS = [ 'Zeyada', ] as const; +// TODO: !! Put in separate file +export interface Font { + // TODO: !! Annotate + // TODO: !! [🧠] System - Google, Adobe... + fontFamily: string_font_family; + + // TODO: !! [🧠] More granular split - handwriting, serif, sans-serif, monospace, cursive, fantasy,... + isSpecial: boolean; +} + +export const FONTS: Array = [ + ...FONTS_LIST_STANDARD.map((fontFamily) => ({ + fontFamily, + isSpecial: false, + })), + ...FONTS_LIST_EXTENDED.map((fontFamily) => ({ + fontFamily, + isSpecial: true, + })), +]; + export const COPILOT_PLACEHOLDERS: Array = [ // Note: ⏣ Describe the change> 'Translate to Chinese', @@ -989,9 +1044,15 @@ export const CDN = (CDN_BUCKET && accessKeyId: CDN_ACCESS_KEY_ID!, secretAccessKey: CDN_SECRET_ACCESS_KEY!, cdnPublicUrl: CDN_PUBLIC_URL!, - gzip: false /* <- TODO: Maybe just remove this functionality from 1-2i repository */, + gzip: false /* <- TODO: Maybe just remove this functionality from WebGPT repository */, })) as DigitalOceanSpaces; export const MIDJOURNEY_WHOLE_GALLERY_PATH = 'X:/Mythings/MidJourney'; +export const PUBLISH_TO_GITHUB_ORGANIZATION = config.get( + 'PUBLISH_TO_GITHUB_ORGANIZATION', + `@see https://github.com/settings/tokens`, +).value; export const GITHUB_TOKEN = config.get('GITHUB_TOKEN', `@see https://github.com/settings/tokens`).value; + +// TODO: !! Annotate all diff --git a/cypress/e2e/pageLoad.cy.ts b/cypress/e2e/pageLoad.cy.ts index fb09c7cea1..831e3baaf3 100644 --- a/cypress/e2e/pageLoad.cy.ts +++ b/cypress/e2e/pageLoad.cy.ts @@ -7,7 +7,7 @@ context('localhost', () => { describe('Visiting the page', () => { it('should be able to see the heading', () => { - cy.contains(/Aiai/i); + cy.contains(/WebGPT/i); }); }); }); diff --git a/database/dumps/structure.dump.pgsql b/database/dumps/structure.dump.pgsql index b250cf5c44..e69de29bb2 100644 --- a/database/dumps/structure.dump.pgsql +++ b/database/dumps/structure.dump.pgsql @@ -1,3774 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 15.1 (Ubuntu 15.1-1.pgdg20.04+1) --- Dumped by pg_dump version 15.3 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - --- --- Name: auth; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA auth; - - -ALTER SCHEMA auth OWNER TO supabase_admin; - --- --- Name: extensions; Type: SCHEMA; Schema: -; Owner: postgres --- - -CREATE SCHEMA extensions; - - -ALTER SCHEMA extensions OWNER TO postgres; - --- --- Name: graphql; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA graphql; - - -ALTER SCHEMA graphql OWNER TO supabase_admin; - --- --- Name: graphql_public; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA graphql_public; - - -ALTER SCHEMA graphql_public OWNER TO supabase_admin; - --- --- Name: pgbouncer; Type: SCHEMA; Schema: -; Owner: pgbouncer --- - -CREATE SCHEMA pgbouncer; - - -ALTER SCHEMA pgbouncer OWNER TO pgbouncer; - --- --- Name: pgsodium; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA pgsodium; - - -ALTER SCHEMA pgsodium OWNER TO supabase_admin; - --- --- Name: pgsodium; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pgsodium WITH SCHEMA pgsodium; - - --- --- Name: EXTENSION pgsodium; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION pgsodium IS 'Pgsodium is a modern cryptography library for Postgres.'; - - --- --- Name: realtime; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA realtime; - - -ALTER SCHEMA realtime OWNER TO supabase_admin; - --- --- Name: storage; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA storage; - - -ALTER SCHEMA storage OWNER TO supabase_admin; - --- --- Name: vault; Type: SCHEMA; Schema: -; Owner: supabase_admin --- - -CREATE SCHEMA vault; - - -ALTER SCHEMA vault OWNER TO supabase_admin; - --- --- Name: pg_graphql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pg_graphql WITH SCHEMA graphql; - - --- --- Name: EXTENSION pg_graphql; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION pg_graphql IS 'pg_graphql: GraphQL support'; - - --- --- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA extensions; - - --- --- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed'; - - --- --- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions; - - --- --- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; - - --- --- Name: pgjwt; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS pgjwt WITH SCHEMA extensions; - - --- --- Name: EXTENSION pgjwt; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION pgjwt IS 'JSON Web Token API for Postgresql'; - - --- --- Name: supabase_vault; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS supabase_vault WITH SCHEMA vault; - - --- --- Name: EXTENSION supabase_vault; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION supabase_vault IS 'Supabase Vault Extension'; - - --- --- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions; - - --- --- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; - - --- --- Name: aal_level; Type: TYPE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TYPE auth.aal_level AS ENUM ( - 'aal1', - 'aal2', - 'aal3' -); - - -ALTER TYPE auth.aal_level OWNER TO supabase_auth_admin; - --- --- Name: code_challenge_method; Type: TYPE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TYPE auth.code_challenge_method AS ENUM ( - 's256', - 'plain' -); - - -ALTER TYPE auth.code_challenge_method OWNER TO supabase_auth_admin; - --- --- Name: factor_status; Type: TYPE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TYPE auth.factor_status AS ENUM ( - 'unverified', - 'verified' -); - - -ALTER TYPE auth.factor_status OWNER TO supabase_auth_admin; - --- --- Name: factor_type; Type: TYPE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TYPE auth.factor_type AS ENUM ( - 'totp', - 'webauthn' -); - - -ALTER TYPE auth.factor_type OWNER TO supabase_auth_admin; - --- --- Name: email(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin --- - -CREATE FUNCTION auth.email() RETURNS text - LANGUAGE sql STABLE - AS $$ - select - coalesce( - nullif(current_setting('request.jwt.claim.email', true), ''), - (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'email') - )::text -$$; - - -ALTER FUNCTION auth.email() OWNER TO supabase_auth_admin; - --- --- Name: FUNCTION email(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON FUNCTION auth.email() IS 'Deprecated. Use auth.jwt() -> ''email'' instead.'; - - --- --- Name: jwt(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin --- - -CREATE FUNCTION auth.jwt() RETURNS jsonb - LANGUAGE sql STABLE - AS $$ - select - coalesce( - nullif(current_setting('request.jwt.claim', true), ''), - nullif(current_setting('request.jwt.claims', true), '') - )::jsonb -$$; - - -ALTER FUNCTION auth.jwt() OWNER TO supabase_auth_admin; - --- --- Name: role(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin --- - -CREATE FUNCTION auth.role() RETURNS text - LANGUAGE sql STABLE - AS $$ - select - coalesce( - nullif(current_setting('request.jwt.claim.role', true), ''), - (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role') - )::text -$$; - - -ALTER FUNCTION auth.role() OWNER TO supabase_auth_admin; - --- --- Name: FUNCTION role(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON FUNCTION auth.role() IS 'Deprecated. Use auth.jwt() -> ''role'' instead.'; - - --- --- Name: uid(); Type: FUNCTION; Schema: auth; Owner: supabase_auth_admin --- - -CREATE FUNCTION auth.uid() RETURNS uuid - LANGUAGE sql STABLE - AS $$ - select - coalesce( - nullif(current_setting('request.jwt.claim.sub', true), ''), - (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'sub') - )::uuid -$$; - - -ALTER FUNCTION auth.uid() OWNER TO supabase_auth_admin; - --- --- Name: FUNCTION uid(); Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON FUNCTION auth.uid() IS 'Deprecated. Use auth.jwt() -> ''sub'' instead.'; - - --- --- Name: grant_pg_cron_access(); Type: FUNCTION; Schema: extensions; Owner: postgres --- - -CREATE FUNCTION extensions.grant_pg_cron_access() RETURNS event_trigger - LANGUAGE plpgsql - AS $$ -DECLARE - schema_is_cron bool; -BEGIN - schema_is_cron = ( - SELECT n.nspname = 'cron' - FROM pg_event_trigger_ddl_commands() AS ev - LEFT JOIN pg_catalog.pg_namespace AS n - ON ev.objid = n.oid - ); - - IF schema_is_cron - THEN - grant usage on schema cron to postgres with grant option; - - alter default privileges in schema cron grant all on tables to postgres with grant option; - alter default privileges in schema cron grant all on functions to postgres with grant option; - alter default privileges in schema cron grant all on sequences to postgres with grant option; - - alter default privileges for user supabase_admin in schema cron grant all - on sequences to postgres with grant option; - alter default privileges for user supabase_admin in schema cron grant all - on tables to postgres with grant option; - alter default privileges for user supabase_admin in schema cron grant all - on functions to postgres with grant option; - - grant all privileges on all tables in schema cron to postgres with grant option; - - END IF; - -END; -$$; - - -ALTER FUNCTION extensions.grant_pg_cron_access() OWNER TO postgres; - --- --- Name: FUNCTION grant_pg_cron_access(); Type: COMMENT; Schema: extensions; Owner: postgres --- - -COMMENT ON FUNCTION extensions.grant_pg_cron_access() IS 'Grants access to pg_cron'; - - --- --- Name: grant_pg_graphql_access(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin --- - -CREATE FUNCTION extensions.grant_pg_graphql_access() RETURNS event_trigger - LANGUAGE plpgsql - AS $_$ -DECLARE - func_is_graphql_resolve bool; -BEGIN - func_is_graphql_resolve = ( - SELECT n.proname = 'resolve' - FROM pg_event_trigger_ddl_commands() AS ev - LEFT JOIN pg_catalog.pg_proc AS n - ON ev.objid = n.oid - ); - - IF func_is_graphql_resolve - THEN - -- Update public wrapper to pass all arguments through to the pg_graphql resolve func - DROP FUNCTION IF EXISTS graphql_public.graphql; - create or replace function graphql_public.graphql( - "operationName" text default null, - query text default null, - variables jsonb default null, - extensions jsonb default null - ) - returns jsonb - language sql - as $$ - select graphql.resolve( - query := query, - variables := coalesce(variables, '{}'), - "operationName" := "operationName", - extensions := extensions - ); - $$; - - -- This hook executes when `graphql.resolve` is created. That is not necessarily the last - -- function in the extension so we need to grant permissions on existing entities AND - -- update default permissions to any others that are created after `graphql.resolve` - grant usage on schema graphql to postgres, anon, authenticated, service_role; - grant select on all tables in schema graphql to postgres, anon, authenticated, service_role; - grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role; - grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role; - alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role; - alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role; - alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role; - END IF; - -END; -$_$; - - -ALTER FUNCTION extensions.grant_pg_graphql_access() OWNER TO supabase_admin; - --- --- Name: FUNCTION grant_pg_graphql_access(); Type: COMMENT; Schema: extensions; Owner: supabase_admin --- - -COMMENT ON FUNCTION extensions.grant_pg_graphql_access() IS 'Grants access to pg_graphql'; - - --- --- Name: grant_pg_net_access(); Type: FUNCTION; Schema: extensions; Owner: postgres --- - -CREATE FUNCTION extensions.grant_pg_net_access() RETURNS event_trigger - LANGUAGE plpgsql - AS $$ -BEGIN - IF EXISTS ( - SELECT 1 - FROM pg_event_trigger_ddl_commands() AS ev - JOIN pg_extension AS ext - ON ev.objid = ext.oid - WHERE ext.extname = 'pg_net' - ) - THEN - IF NOT EXISTS ( - SELECT 1 - FROM pg_roles - WHERE rolname = 'supabase_functions_admin' - ) - THEN - CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION; - END IF; - - GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; - - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - - REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - - GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - END IF; -END; -$$; - - -ALTER FUNCTION extensions.grant_pg_net_access() OWNER TO postgres; - --- --- Name: FUNCTION grant_pg_net_access(); Type: COMMENT; Schema: extensions; Owner: postgres --- - -COMMENT ON FUNCTION extensions.grant_pg_net_access() IS 'Grants access to pg_net'; - - --- --- Name: pgrst_ddl_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin --- - -CREATE FUNCTION extensions.pgrst_ddl_watch() RETURNS event_trigger - LANGUAGE plpgsql - AS $$ -DECLARE - cmd record; -BEGIN - FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands() - LOOP - IF cmd.command_tag IN ( - 'CREATE SCHEMA', 'ALTER SCHEMA' - , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE' - , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE' - , 'CREATE VIEW', 'ALTER VIEW' - , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW' - , 'CREATE FUNCTION', 'ALTER FUNCTION' - , 'CREATE TRIGGER' - , 'CREATE TYPE', 'ALTER TYPE' - , 'CREATE RULE' - , 'COMMENT' - ) - -- don't notify in case of CREATE TEMP table or other objects created on pg_temp - AND cmd.schema_name is distinct from 'pg_temp' - THEN - NOTIFY pgrst, 'reload schema'; - END IF; - END LOOP; -END; $$; - - -ALTER FUNCTION extensions.pgrst_ddl_watch() OWNER TO supabase_admin; - --- --- Name: pgrst_drop_watch(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin --- - -CREATE FUNCTION extensions.pgrst_drop_watch() RETURNS event_trigger - LANGUAGE plpgsql - AS $$ -DECLARE - obj record; -BEGIN - FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() - LOOP - IF obj.object_type IN ( - 'schema' - , 'table' - , 'foreign table' - , 'view' - , 'materialized view' - , 'function' - , 'trigger' - , 'type' - , 'rule' - ) - AND obj.is_temporary IS false -- no pg_temp objects - THEN - NOTIFY pgrst, 'reload schema'; - END IF; - END LOOP; -END; $$; - - -ALTER FUNCTION extensions.pgrst_drop_watch() OWNER TO supabase_admin; - --- --- Name: set_graphql_placeholder(); Type: FUNCTION; Schema: extensions; Owner: supabase_admin --- - -CREATE FUNCTION extensions.set_graphql_placeholder() RETURNS event_trigger - LANGUAGE plpgsql - AS $_$ - DECLARE - graphql_is_dropped bool; - BEGIN - graphql_is_dropped = ( - SELECT ev.schema_name = 'graphql_public' - FROM pg_event_trigger_dropped_objects() AS ev - WHERE ev.schema_name = 'graphql_public' - ); - - IF graphql_is_dropped - THEN - create or replace function graphql_public.graphql( - "operationName" text default null, - query text default null, - variables jsonb default null, - extensions jsonb default null - ) - returns jsonb - language plpgsql - as $$ - DECLARE - server_version float; - BEGIN - server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float); - - IF server_version >= 14 THEN - RETURN jsonb_build_object( - 'errors', jsonb_build_array( - jsonb_build_object( - 'message', 'pg_graphql extension is not enabled.' - ) - ) - ); - ELSE - RETURN jsonb_build_object( - 'errors', jsonb_build_array( - jsonb_build_object( - 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.' - ) - ) - ); - END IF; - END; - $$; - END IF; - - END; -$_$; - - -ALTER FUNCTION extensions.set_graphql_placeholder() OWNER TO supabase_admin; - --- --- Name: FUNCTION set_graphql_placeholder(); Type: COMMENT; Schema: extensions; Owner: supabase_admin --- - -COMMENT ON FUNCTION extensions.set_graphql_placeholder() IS 'Reintroduces placeholder function for graphql_public.graphql'; - - --- --- Name: get_auth(text); Type: FUNCTION; Schema: pgbouncer; Owner: postgres --- - -CREATE FUNCTION pgbouncer.get_auth(p_usename text) RETURNS TABLE(username text, password text) - LANGUAGE plpgsql SECURITY DEFINER - AS $$ -BEGIN - RAISE WARNING 'PgBouncer auth request: %', p_usename; - - RETURN QUERY - SELECT usename::TEXT, passwd::TEXT FROM pg_catalog.pg_shadow - WHERE usename = p_usename; -END; -$$; - - -ALTER FUNCTION pgbouncer.get_auth(p_usename text) OWNER TO postgres; - --- --- Name: can_insert_object(text, text, uuid, jsonb); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) RETURNS void - LANGUAGE plpgsql - AS $$ -BEGIN - INSERT INTO "storage"."objects" ("bucket_id", "name", "owner", "metadata") VALUES (bucketid, name, owner, metadata); - -- hack to rollback the successful insert - RAISE sqlstate 'PT200' using - message = 'ROLLBACK', - detail = 'rollback successful insert'; -END -$$; - - -ALTER FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) OWNER TO supabase_storage_admin; - --- --- Name: extension(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.extension(name text) RETURNS text - LANGUAGE plpgsql - AS $$ -DECLARE -_parts text[]; -_filename text; -BEGIN - select string_to_array(name, '/') into _parts; - select _parts[array_length(_parts,1)] into _filename; - -- @todo return the last part instead of 2 - return split_part(_filename, '.', 2); -END -$$; - - -ALTER FUNCTION storage.extension(name text) OWNER TO supabase_storage_admin; - --- --- Name: filename(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.filename(name text) RETURNS text - LANGUAGE plpgsql - AS $$ -DECLARE -_parts text[]; -BEGIN - select string_to_array(name, '/') into _parts; - return _parts[array_length(_parts,1)]; -END -$$; - - -ALTER FUNCTION storage.filename(name text) OWNER TO supabase_storage_admin; - --- --- Name: foldername(text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.foldername(name text) RETURNS text[] - LANGUAGE plpgsql - AS $$ -DECLARE -_parts text[]; -BEGIN - select string_to_array(name, '/') into _parts; - return _parts[1:array_length(_parts,1)-1]; -END -$$; - - -ALTER FUNCTION storage.foldername(name text) OWNER TO supabase_storage_admin; - --- --- Name: get_size_by_bucket(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.get_size_by_bucket() RETURNS TABLE(size bigint, bucket_id text) - LANGUAGE plpgsql - AS $$ -BEGIN - return query - select sum((metadata->>'size')::int) as size, obj.bucket_id - from "storage".objects as obj - group by obj.bucket_id; -END -$$; - - -ALTER FUNCTION storage.get_size_by_bucket() OWNER TO supabase_storage_admin; - --- --- Name: search(text, text, integer, integer, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb) - LANGUAGE plpgsql STABLE - AS $_$ -declare - v_order_by text; - v_sort_order text; -begin - case - when sortcolumn = 'name' then - v_order_by = 'name'; - when sortcolumn = 'updated_at' then - v_order_by = 'updated_at'; - when sortcolumn = 'created_at' then - v_order_by = 'created_at'; - when sortcolumn = 'last_accessed_at' then - v_order_by = 'last_accessed_at'; - else - v_order_by = 'name'; - end case; - - case - when sortorder = 'asc' then - v_sort_order = 'asc'; - when sortorder = 'desc' then - v_sort_order = 'desc'; - else - v_sort_order = 'asc'; - end case; - - v_order_by = v_order_by || ' ' || v_sort_order; - - return query execute - 'with folders as ( - select path_tokens[$1] as folder - from storage.objects - where objects.name ilike $2 || $3 || ''%'' - and bucket_id = $4 - and array_length(regexp_split_to_array(objects.name, ''/''), 1) <> $1 - group by folder - order by folder ' || v_sort_order || ' - ) - (select folder as "name", - null as id, - null as updated_at, - null as created_at, - null as last_accessed_at, - null as metadata from folders) - union all - (select path_tokens[$1] as "name", - id, - updated_at, - created_at, - last_accessed_at, - metadata - from storage.objects - where objects.name ilike $2 || $3 || ''%'' - and bucket_id = $4 - and array_length(regexp_split_to_array(objects.name, ''/''), 1) = $1 - order by ' || v_order_by || ') - limit $5 - offset $6' using levels, prefix, search, bucketname, limits, offsets; -end; -$_$; - - -ALTER FUNCTION storage.search(prefix text, bucketname text, limits integer, levels integer, offsets integer, search text, sortcolumn text, sortorder text) OWNER TO supabase_storage_admin; - --- --- Name: update_updated_at_column(); Type: FUNCTION; Schema: storage; Owner: supabase_storage_admin --- - -CREATE FUNCTION storage.update_updated_at_column() RETURNS trigger - LANGUAGE plpgsql - AS $$ -BEGIN - NEW.updated_at = now(); - RETURN NEW; -END; -$$; - - -ALTER FUNCTION storage.update_updated_at_column() OWNER TO supabase_storage_admin; - --- --- Name: secrets_encrypt_secret_secret(); Type: FUNCTION; Schema: vault; Owner: supabase_admin --- - -CREATE FUNCTION vault.secrets_encrypt_secret_secret() RETURNS trigger - LANGUAGE plpgsql - AS $$ - BEGIN - new.secret = CASE WHEN new.secret IS NULL THEN NULL ELSE - CASE WHEN new.key_id IS NULL THEN NULL ELSE pg_catalog.encode( - pgsodium.crypto_aead_det_encrypt( - pg_catalog.convert_to(new.secret, 'utf8'), - pg_catalog.convert_to((new.id::text || new.description::text || new.created_at::text || new.updated_at::text)::text, 'utf8'), - new.key_id::uuid, - new.nonce - ), - 'base64') END END; - RETURN new; - END; - $$; - - -ALTER FUNCTION vault.secrets_encrypt_secret_secret() OWNER TO supabase_admin; - -SET default_tablespace = ''; - -SET default_table_access_method = heap; - --- --- Name: audit_log_entries; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.audit_log_entries ( - instance_id uuid, - id uuid NOT NULL, - payload json, - created_at timestamp with time zone, - ip_address character varying(64) DEFAULT ''::character varying NOT NULL -); - - -ALTER TABLE auth.audit_log_entries OWNER TO supabase_auth_admin; - --- --- Name: TABLE audit_log_entries; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.audit_log_entries IS 'Auth: Audit trail for user actions.'; - - --- --- Name: flow_state; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.flow_state ( - id uuid NOT NULL, - user_id uuid, - auth_code text NOT NULL, - code_challenge_method auth.code_challenge_method NOT NULL, - code_challenge text NOT NULL, - provider_type text NOT NULL, - provider_access_token text, - provider_refresh_token text, - created_at timestamp with time zone, - updated_at timestamp with time zone, - authentication_method text NOT NULL -); - - -ALTER TABLE auth.flow_state OWNER TO supabase_auth_admin; - --- --- Name: TABLE flow_state; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.flow_state IS 'stores metadata for pkce logins'; - - --- --- Name: identities; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.identities ( - id text NOT NULL, - user_id uuid NOT NULL, - identity_data jsonb NOT NULL, - provider text NOT NULL, - last_sign_in_at timestamp with time zone, - created_at timestamp with time zone, - updated_at timestamp with time zone, - email text GENERATED ALWAYS AS (lower((identity_data ->> 'email'::text))) STORED -); - - -ALTER TABLE auth.identities OWNER TO supabase_auth_admin; - --- --- Name: TABLE identities; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.identities IS 'Auth: Stores identities associated to a user.'; - - --- --- Name: COLUMN identities.email; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON COLUMN auth.identities.email IS 'Auth: Email is a generated column that references the optional email property in the identity_data'; - - --- --- Name: instances; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.instances ( - id uuid NOT NULL, - uuid uuid, - raw_base_config text, - created_at timestamp with time zone, - updated_at timestamp with time zone -); - - -ALTER TABLE auth.instances OWNER TO supabase_auth_admin; - --- --- Name: TABLE instances; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.instances IS 'Auth: Manages users across multiple sites.'; - - --- --- Name: mfa_amr_claims; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.mfa_amr_claims ( - session_id uuid NOT NULL, - created_at timestamp with time zone NOT NULL, - updated_at timestamp with time zone NOT NULL, - authentication_method text NOT NULL, - id uuid NOT NULL -); - - -ALTER TABLE auth.mfa_amr_claims OWNER TO supabase_auth_admin; - --- --- Name: TABLE mfa_amr_claims; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.mfa_amr_claims IS 'auth: stores authenticator method reference claims for multi factor authentication'; - - --- --- Name: mfa_challenges; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.mfa_challenges ( - id uuid NOT NULL, - factor_id uuid NOT NULL, - created_at timestamp with time zone NOT NULL, - verified_at timestamp with time zone, - ip_address inet NOT NULL -); - - -ALTER TABLE auth.mfa_challenges OWNER TO supabase_auth_admin; - --- --- Name: TABLE mfa_challenges; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.mfa_challenges IS 'auth: stores metadata about challenge requests made'; - - --- --- Name: mfa_factors; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.mfa_factors ( - id uuid NOT NULL, - user_id uuid NOT NULL, - friendly_name text, - factor_type auth.factor_type NOT NULL, - status auth.factor_status NOT NULL, - created_at timestamp with time zone NOT NULL, - updated_at timestamp with time zone NOT NULL, - secret text -); - - -ALTER TABLE auth.mfa_factors OWNER TO supabase_auth_admin; - --- --- Name: TABLE mfa_factors; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.mfa_factors IS 'auth: stores metadata about factors'; - - --- --- Name: refresh_tokens; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.refresh_tokens ( - instance_id uuid, - id bigint NOT NULL, - token character varying(255), - user_id character varying(255), - revoked boolean, - created_at timestamp with time zone, - updated_at timestamp with time zone, - parent character varying(255), - session_id uuid -); - - -ALTER TABLE auth.refresh_tokens OWNER TO supabase_auth_admin; - --- --- Name: TABLE refresh_tokens; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.refresh_tokens IS 'Auth: Store of tokens used to refresh JWT tokens once they expire.'; - - --- --- Name: refresh_tokens_id_seq; Type: SEQUENCE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE SEQUENCE auth.refresh_tokens_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE auth.refresh_tokens_id_seq OWNER TO supabase_auth_admin; - --- --- Name: refresh_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: auth; Owner: supabase_auth_admin --- - -ALTER SEQUENCE auth.refresh_tokens_id_seq OWNED BY auth.refresh_tokens.id; - - --- --- Name: saml_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.saml_providers ( - id uuid NOT NULL, - sso_provider_id uuid NOT NULL, - entity_id text NOT NULL, - metadata_xml text NOT NULL, - metadata_url text, - attribute_mapping jsonb, - created_at timestamp with time zone, - updated_at timestamp with time zone, - CONSTRAINT "entity_id not empty" CHECK ((char_length(entity_id) > 0)), - CONSTRAINT "metadata_url not empty" CHECK (((metadata_url = NULL::text) OR (char_length(metadata_url) > 0))), - CONSTRAINT "metadata_xml not empty" CHECK ((char_length(metadata_xml) > 0)) -); - - -ALTER TABLE auth.saml_providers OWNER TO supabase_auth_admin; - --- --- Name: TABLE saml_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.saml_providers IS 'Auth: Manages SAML Identity Provider connections.'; - - --- --- Name: saml_relay_states; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.saml_relay_states ( - id uuid NOT NULL, - sso_provider_id uuid NOT NULL, - request_id text NOT NULL, - for_email text, - redirect_to text, - from_ip_address inet, - created_at timestamp with time zone, - updated_at timestamp with time zone, - CONSTRAINT "request_id not empty" CHECK ((char_length(request_id) > 0)) -); - - -ALTER TABLE auth.saml_relay_states OWNER TO supabase_auth_admin; - --- --- Name: TABLE saml_relay_states; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.saml_relay_states IS 'Auth: Contains SAML Relay State information for each Service Provider initiated login.'; - - --- --- Name: schema_migrations; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.schema_migrations ( - version character varying(255) NOT NULL -); - - -ALTER TABLE auth.schema_migrations OWNER TO supabase_auth_admin; - --- --- Name: TABLE schema_migrations; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.schema_migrations IS 'Auth: Manages updates to the auth system.'; - - --- --- Name: sessions; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.sessions ( - id uuid NOT NULL, - user_id uuid NOT NULL, - created_at timestamp with time zone, - updated_at timestamp with time zone, - factor_id uuid, - aal auth.aal_level, - not_after timestamp with time zone -); - - -ALTER TABLE auth.sessions OWNER TO supabase_auth_admin; - --- --- Name: TABLE sessions; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.sessions IS 'Auth: Stores session data associated to a user.'; - - --- --- Name: COLUMN sessions.not_after; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON COLUMN auth.sessions.not_after IS 'Auth: Not after is a nullable column that contains a timestamp after which the session should be regarded as expired.'; - - --- --- Name: sso_domains; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.sso_domains ( - id uuid NOT NULL, - sso_provider_id uuid NOT NULL, - domain text NOT NULL, - created_at timestamp with time zone, - updated_at timestamp with time zone, - CONSTRAINT "domain not empty" CHECK ((char_length(domain) > 0)) -); - - -ALTER TABLE auth.sso_domains OWNER TO supabase_auth_admin; - --- --- Name: TABLE sso_domains; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.sso_domains IS 'Auth: Manages SSO email address domain mapping to an SSO Identity Provider.'; - - --- --- Name: sso_providers; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.sso_providers ( - id uuid NOT NULL, - resource_id text, - created_at timestamp with time zone, - updated_at timestamp with time zone, - CONSTRAINT "resource_id not empty" CHECK (((resource_id = NULL::text) OR (char_length(resource_id) > 0))) -); - - -ALTER TABLE auth.sso_providers OWNER TO supabase_auth_admin; - --- --- Name: TABLE sso_providers; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.sso_providers IS 'Auth: Manages SSO identity provider information; see saml_providers for SAML.'; - - --- --- Name: COLUMN sso_providers.resource_id; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON COLUMN auth.sso_providers.resource_id IS 'Auth: Uniquely identifies a SSO provider according to a user-chosen resource ID (case insensitive), useful in infrastructure as code.'; - - --- --- Name: users; Type: TABLE; Schema: auth; Owner: supabase_auth_admin --- - -CREATE TABLE auth.users ( - instance_id uuid, - id uuid NOT NULL, - aud character varying(255), - role character varying(255), - email character varying(255), - encrypted_password character varying(255), - email_confirmed_at timestamp with time zone, - invited_at timestamp with time zone, - confirmation_token character varying(255), - confirmation_sent_at timestamp with time zone, - recovery_token character varying(255), - recovery_sent_at timestamp with time zone, - email_change_token_new character varying(255), - email_change character varying(255), - email_change_sent_at timestamp with time zone, - last_sign_in_at timestamp with time zone, - raw_app_meta_data jsonb, - raw_user_meta_data jsonb, - is_super_admin boolean, - created_at timestamp with time zone, - updated_at timestamp with time zone, - phone text DEFAULT NULL::character varying, - phone_confirmed_at timestamp with time zone, - phone_change text DEFAULT ''::character varying, - phone_change_token character varying(255) DEFAULT ''::character varying, - phone_change_sent_at timestamp with time zone, - confirmed_at timestamp with time zone GENERATED ALWAYS AS (LEAST(email_confirmed_at, phone_confirmed_at)) STORED, - email_change_token_current character varying(255) DEFAULT ''::character varying, - email_change_confirm_status smallint DEFAULT 0, - banned_until timestamp with time zone, - reauthentication_token character varying(255) DEFAULT ''::character varying, - reauthentication_sent_at timestamp with time zone, - is_sso_user boolean DEFAULT false NOT NULL, - deleted_at timestamp with time zone, - CONSTRAINT users_email_change_confirm_status_check CHECK (((email_change_confirm_status >= 0) AND (email_change_confirm_status <= 2))) -); - - -ALTER TABLE auth.users OWNER TO supabase_auth_admin; - --- --- Name: TABLE users; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON TABLE auth.users IS 'Auth: Stores user login data within a secure schema.'; - - --- --- Name: COLUMN users.is_sso_user; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON COLUMN auth.users.is_sso_user IS 'Auth: Set this column to true when the account comes from SSO. These accounts can have duplicate emails.'; - - --- --- Name: Client; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Client" ( - "clientId" uuid NOT NULL, - email text, - "emailPreferences" jsonb, - "createdAt" timestamp with time zone DEFAULT now() -); - - -ALTER TABLE public."Client" OWNER TO postgres; - --- --- Name: TABLE "Client"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Client" IS 'Client is one browser marked with unique id'; - - --- --- Name: Prompt; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Prompt" ( - id bigint NOT NULL, - "previousExternalId" text, - "createdAt" timestamp with time zone DEFAULT now() NOT NULL, - "promptAt" timestamp with time zone, - "answerAt" timestamp with time zone, - "systemMessage" text, - prompt text, - answer text, - model text, - "modelSettings" jsonb, - metadata jsonb, - "clientId" uuid, - type text, - "fullCompletion" jsonb, - "externalId" text -); - - -ALTER TABLE public."Prompt" OWNER TO postgres; - --- --- Name: TABLE "Prompt"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Prompt" IS 'Log (and in future queue) of prompts'; - - --- --- Name: Prompt_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres --- - -ALTER TABLE public."Prompt" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public."Prompt_id_seq" - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Name: Prompt_stats; Type: VIEW; Schema: public; Owner: postgres --- - -CREATE VIEW public."Prompt_stats" AS - SELECT "Prompt".id, - "Prompt".type, - "Prompt"."createdAt", - "Prompt"."clientId", - "Prompt".metadata, - ("Prompt"."answerAt" - "Prompt"."promptAt") AS duration, - "Prompt".model, - "Prompt"."modelSettings", - "Prompt".prompt, - "Prompt"."systemMessage", - "Prompt"."previousExternalId", - "Prompt"."promptAt", - "Prompt".answer, - "Prompt"."externalId", - "Prompt"."fullCompletion", - "Prompt"."answerAt", - 2 AS nonce - FROM public."Prompt" - ORDER BY "Prompt"."answerAt"; - - -ALTER TABLE public."Prompt_stats" OWNER TO postgres; - --- --- Name: Reaction; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Reaction" ( - "wallpaperId" text NOT NULL, - author uuid NOT NULL, - "createdAt" timestamp with time zone DEFAULT now() NOT NULL, - "likedStatus" text NOT NULL -); - - -ALTER TABLE public."Reaction" OWNER TO postgres; - --- --- Name: TABLE "Reaction"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Reaction" IS 'Reactions to wallpaper'; - - --- --- Name: Site; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Site" ( - id bigint NOT NULL, - "createdAt" timestamp with time zone DEFAULT now(), - "wallpaperId" text, - url text, - "ownerEmail" text, - plan text, - note text, - author uuid -); - - -ALTER TABLE public."Site" OWNER TO postgres; - --- --- Name: TABLE "Site"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Site" IS 'Registered sites for AiAi'; - - --- --- Name: Site_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres --- - -ALTER TABLE public."Site" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public."Site_id_seq" - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Name: SupportRequest; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."SupportRequest" ( - id bigint NOT NULL, - "createdAt" timestamp with time zone DEFAULT now(), - "from" text, - message text, - "isSolved" boolean DEFAULT false, - note text, - author uuid -); - - -ALTER TABLE public."SupportRequest" OWNER TO postgres; - --- --- Name: TABLE "SupportRequest"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."SupportRequest" IS 'Requests for help'; - - --- --- Name: SupportRequest_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres --- - -ALTER TABLE public."SupportRequest" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public."SupportRequest_id_seq" - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Name: Value; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Value" ( - id bigint NOT NULL, - "createdAt" timestamp with time zone DEFAULT now() NOT NULL, - "validUntil" timestamp with time zone, - key text, - value jsonb, - note text -); - - -ALTER TABLE public."Value" OWNER TO postgres; - --- --- Name: TABLE "Value"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Value" IS 'Key-value store'; - - --- --- Name: Value_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres --- - -ALTER TABLE public."Value" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public."Value_id_seq" - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Name: Wallpaper; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public."Wallpaper" ( - id text NOT NULL, - parent text, - "createdAt" timestamp with time zone DEFAULT now() NOT NULL, - src text NOT NULL, - prompt text, - "colorStats" jsonb, - title text NOT NULL, - content text NOT NULL, - keywords text[], - author uuid NOT NULL, - "isPublic" boolean DEFAULT false NOT NULL, - "naturalSize" jsonb -); - - -ALTER TABLE public."Wallpaper" OWNER TO postgres; - --- --- Name: TABLE "Wallpaper"; Type: COMMENT; Schema: public; Owner: postgres --- - -COMMENT ON TABLE public."Wallpaper" IS 'Wallpapers (websites) created by users'; - - --- --- Name: Wallpaper_random; Type: VIEW; Schema: public; Owner: postgres --- - -CREATE VIEW public."Wallpaper_random" AS - SELECT "Wallpaper".id, - "Wallpaper".parent, - "Wallpaper"."createdAt", - "Wallpaper".src, - "Wallpaper".prompt, - "Wallpaper"."colorStats", - "Wallpaper".title, - "Wallpaper".content, - "Wallpaper".keywords, - "Wallpaper".author, - "Wallpaper"."isPublic", - 1 AS nonce - FROM public."Wallpaper" - ORDER BY (random()); - - -ALTER TABLE public."Wallpaper_random" OWNER TO postgres; - --- --- Name: buckets; Type: TABLE; Schema: storage; Owner: supabase_storage_admin --- - -CREATE TABLE storage.buckets ( - id text NOT NULL, - name text NOT NULL, - owner uuid, - created_at timestamp with time zone DEFAULT now(), - updated_at timestamp with time zone DEFAULT now(), - public boolean DEFAULT false, - avif_autodetection boolean DEFAULT false, - file_size_limit bigint, - allowed_mime_types text[] -); - - -ALTER TABLE storage.buckets OWNER TO supabase_storage_admin; - --- --- Name: migrations; Type: TABLE; Schema: storage; Owner: supabase_storage_admin --- - -CREATE TABLE storage.migrations ( - id integer NOT NULL, - name character varying(100) NOT NULL, - hash character varying(40) NOT NULL, - executed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP -); - - -ALTER TABLE storage.migrations OWNER TO supabase_storage_admin; - --- --- Name: objects; Type: TABLE; Schema: storage; Owner: supabase_storage_admin --- - -CREATE TABLE storage.objects ( - id uuid DEFAULT extensions.uuid_generate_v4() NOT NULL, - bucket_id text, - name text, - owner uuid, - created_at timestamp with time zone DEFAULT now(), - updated_at timestamp with time zone DEFAULT now(), - last_accessed_at timestamp with time zone DEFAULT now(), - metadata jsonb, - path_tokens text[] GENERATED ALWAYS AS (string_to_array(name, '/'::text)) STORED, - version text -); - - -ALTER TABLE storage.objects OWNER TO supabase_storage_admin; - --- --- Name: decrypted_secrets; Type: VIEW; Schema: vault; Owner: supabase_admin --- - -CREATE VIEW vault.decrypted_secrets AS - SELECT secrets.id, - secrets.name, - secrets.description, - secrets.secret, - CASE - WHEN (secrets.secret IS NULL) THEN NULL::text - ELSE - CASE - WHEN (secrets.key_id IS NULL) THEN NULL::text - ELSE convert_from(pgsodium.crypto_aead_det_decrypt(decode(secrets.secret, 'base64'::text), convert_to(((((secrets.id)::text || secrets.description) || (secrets.created_at)::text) || (secrets.updated_at)::text), 'utf8'::name), secrets.key_id, secrets.nonce), 'utf8'::name) - END - END AS decrypted_secret, - secrets.key_id, - secrets.nonce, - secrets.created_at, - secrets.updated_at - FROM vault.secrets; - - -ALTER TABLE vault.decrypted_secrets OWNER TO supabase_admin; - --- --- Name: refresh_tokens id; Type: DEFAULT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.refresh_tokens ALTER COLUMN id SET DEFAULT nextval('auth.refresh_tokens_id_seq'::regclass); - - --- --- Name: mfa_amr_claims amr_id_pk; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_amr_claims - ADD CONSTRAINT amr_id_pk PRIMARY KEY (id); - - --- --- Name: audit_log_entries audit_log_entries_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.audit_log_entries - ADD CONSTRAINT audit_log_entries_pkey PRIMARY KEY (id); - - --- --- Name: flow_state flow_state_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.flow_state - ADD CONSTRAINT flow_state_pkey PRIMARY KEY (id); - - --- --- Name: identities identities_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.identities - ADD CONSTRAINT identities_pkey PRIMARY KEY (provider, id); - - --- --- Name: instances instances_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.instances - ADD CONSTRAINT instances_pkey PRIMARY KEY (id); - - --- --- Name: mfa_amr_claims mfa_amr_claims_session_id_authentication_method_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_amr_claims - ADD CONSTRAINT mfa_amr_claims_session_id_authentication_method_pkey UNIQUE (session_id, authentication_method); - - --- --- Name: mfa_challenges mfa_challenges_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_challenges - ADD CONSTRAINT mfa_challenges_pkey PRIMARY KEY (id); - - --- --- Name: mfa_factors mfa_factors_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_factors - ADD CONSTRAINT mfa_factors_pkey PRIMARY KEY (id); - - --- --- Name: refresh_tokens refresh_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.refresh_tokens - ADD CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id); - - --- --- Name: refresh_tokens refresh_tokens_token_unique; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.refresh_tokens - ADD CONSTRAINT refresh_tokens_token_unique UNIQUE (token); - - --- --- Name: saml_providers saml_providers_entity_id_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.saml_providers - ADD CONSTRAINT saml_providers_entity_id_key UNIQUE (entity_id); - - --- --- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.saml_providers - ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id); - - --- --- Name: saml_relay_states saml_relay_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.saml_relay_states - ADD CONSTRAINT saml_relay_states_pkey PRIMARY KEY (id); - - --- --- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.schema_migrations - ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version); - - --- --- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.sessions - ADD CONSTRAINT sessions_pkey PRIMARY KEY (id); - - --- --- Name: sso_domains sso_domains_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.sso_domains - ADD CONSTRAINT sso_domains_pkey PRIMARY KEY (id); - - --- --- Name: sso_providers sso_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.sso_providers - ADD CONSTRAINT sso_providers_pkey PRIMARY KEY (id); - - --- --- Name: users users_phone_key; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.users - ADD CONSTRAINT users_phone_key UNIQUE (phone); - - --- --- Name: users users_pkey; Type: CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.users - ADD CONSTRAINT users_pkey PRIMARY KEY (id); - - --- --- Name: Client Client_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Client" - ADD CONSTRAINT "Client_pkey" PRIMARY KEY ("clientId"); - - --- --- Name: Prompt Prompt_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Prompt" - ADD CONSTRAINT "Prompt_pkey" PRIMARY KEY (id); - - --- --- Name: Reaction Reaction_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Reaction" - ADD CONSTRAINT "Reaction_pkey" PRIMARY KEY ("wallpaperId", author, "createdAt"); - - --- --- Name: Site Site_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Site" - ADD CONSTRAINT "Site_pkey" PRIMARY KEY (id); - - --- --- Name: Site Site_url_key; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Site" - ADD CONSTRAINT "Site_url_key" UNIQUE (url); - - --- --- Name: SupportRequest SupportRequest_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."SupportRequest" - ADD CONSTRAINT "SupportRequest_pkey" PRIMARY KEY (id); - - --- --- Name: Value Value_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Value" - ADD CONSTRAINT "Value_pkey" PRIMARY KEY (id); - - --- --- Name: Wallpaper Wallpaper_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Wallpaper" - ADD CONSTRAINT "Wallpaper_pkey" PRIMARY KEY (id); - - --- --- Name: buckets buckets_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.buckets - ADD CONSTRAINT buckets_pkey PRIMARY KEY (id); - - --- --- Name: migrations migrations_name_key; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.migrations - ADD CONSTRAINT migrations_name_key UNIQUE (name); - - --- --- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.migrations - ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); - - --- --- Name: objects objects_pkey; Type: CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.objects - ADD CONSTRAINT objects_pkey PRIMARY KEY (id); - - --- --- Name: audit_logs_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id); - - --- --- Name: confirmation_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX confirmation_token_idx ON auth.users USING btree (confirmation_token) WHERE ((confirmation_token)::text !~ '^[0-9 ]*$'::text); - - --- --- Name: email_change_token_current_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX email_change_token_current_idx ON auth.users USING btree (email_change_token_current) WHERE ((email_change_token_current)::text !~ '^[0-9 ]*$'::text); - - --- --- Name: email_change_token_new_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX email_change_token_new_idx ON auth.users USING btree (email_change_token_new) WHERE ((email_change_token_new)::text !~ '^[0-9 ]*$'::text); - - --- --- Name: factor_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX factor_id_created_at_idx ON auth.mfa_factors USING btree (user_id, created_at); - - --- --- Name: flow_state_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX flow_state_created_at_idx ON auth.flow_state USING btree (created_at DESC); - - --- --- Name: identities_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX identities_email_idx ON auth.identities USING btree (email text_pattern_ops); - - --- --- Name: INDEX identities_email_idx; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON INDEX auth.identities_email_idx IS 'Auth: Ensures indexed queries on the email column'; - - --- --- Name: identities_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX identities_user_id_idx ON auth.identities USING btree (user_id); - - --- --- Name: idx_auth_code; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX idx_auth_code ON auth.flow_state USING btree (auth_code); - - --- --- Name: idx_user_id_auth_method; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX idx_user_id_auth_method ON auth.flow_state USING btree (user_id, authentication_method); - - --- --- Name: mfa_challenge_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX mfa_challenge_created_at_idx ON auth.mfa_challenges USING btree (created_at DESC); - - --- --- Name: mfa_factors_user_friendly_name_unique; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX mfa_factors_user_friendly_name_unique ON auth.mfa_factors USING btree (friendly_name, user_id) WHERE (TRIM(BOTH FROM friendly_name) <> ''::text); - - --- --- Name: reauthentication_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX reauthentication_token_idx ON auth.users USING btree (reauthentication_token) WHERE ((reauthentication_token)::text !~ '^[0-9 ]*$'::text); - - --- --- Name: recovery_token_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX recovery_token_idx ON auth.users USING btree (recovery_token) WHERE ((recovery_token)::text !~ '^[0-9 ]*$'::text); - - --- --- Name: refresh_tokens_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id); - - --- --- Name: refresh_tokens_instance_id_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id); - - --- --- Name: refresh_tokens_parent_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX refresh_tokens_parent_idx ON auth.refresh_tokens USING btree (parent); - - --- --- Name: refresh_tokens_session_id_revoked_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX refresh_tokens_session_id_revoked_idx ON auth.refresh_tokens USING btree (session_id, revoked); - - --- --- Name: refresh_tokens_updated_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX refresh_tokens_updated_at_idx ON auth.refresh_tokens USING btree (updated_at DESC); - - --- --- Name: saml_providers_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX saml_providers_sso_provider_id_idx ON auth.saml_providers USING btree (sso_provider_id); - - --- --- Name: saml_relay_states_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX saml_relay_states_created_at_idx ON auth.saml_relay_states USING btree (created_at DESC); - - --- --- Name: saml_relay_states_for_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX saml_relay_states_for_email_idx ON auth.saml_relay_states USING btree (for_email); - - --- --- Name: saml_relay_states_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX saml_relay_states_sso_provider_id_idx ON auth.saml_relay_states USING btree (sso_provider_id); - - --- --- Name: sessions_not_after_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX sessions_not_after_idx ON auth.sessions USING btree (not_after DESC); - - --- --- Name: sessions_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX sessions_user_id_idx ON auth.sessions USING btree (user_id); - - --- --- Name: sso_domains_domain_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX sso_domains_domain_idx ON auth.sso_domains USING btree (lower(domain)); - - --- --- Name: sso_domains_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX sso_domains_sso_provider_id_idx ON auth.sso_domains USING btree (sso_provider_id); - - --- --- Name: sso_providers_resource_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX sso_providers_resource_id_idx ON auth.sso_providers USING btree (lower(resource_id)); - - --- --- Name: user_id_created_at_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX user_id_created_at_idx ON auth.sessions USING btree (user_id, created_at); - - --- --- Name: users_email_partial_key; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE UNIQUE INDEX users_email_partial_key ON auth.users USING btree (email) WHERE (is_sso_user = false); - - --- --- Name: INDEX users_email_partial_key; Type: COMMENT; Schema: auth; Owner: supabase_auth_admin --- - -COMMENT ON INDEX auth.users_email_partial_key IS 'Auth: A partial unique index that applies only when is_sso_user is false'; - - --- --- Name: users_instance_id_email_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, lower((email)::text)); - - --- --- Name: users_instance_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin --- - -CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id); - - --- --- Name: bname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin --- - -CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name); - - --- --- Name: bucketid_objname; Type: INDEX; Schema: storage; Owner: supabase_storage_admin --- - -CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name); - - --- --- Name: name_prefix_search; Type: INDEX; Schema: storage; Owner: supabase_storage_admin --- - -CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops); - - --- --- Name: objects update_objects_updated_at; Type: TRIGGER; Schema: storage; Owner: supabase_storage_admin --- - -CREATE TRIGGER update_objects_updated_at BEFORE UPDATE ON storage.objects FOR EACH ROW EXECUTE FUNCTION storage.update_updated_at_column(); - - --- --- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.identities - ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; - - --- --- Name: mfa_amr_claims mfa_amr_claims_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_amr_claims - ADD CONSTRAINT mfa_amr_claims_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE; - - --- --- Name: mfa_challenges mfa_challenges_auth_factor_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_challenges - ADD CONSTRAINT mfa_challenges_auth_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES auth.mfa_factors(id) ON DELETE CASCADE; - - --- --- Name: mfa_factors mfa_factors_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.mfa_factors - ADD CONSTRAINT mfa_factors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; - - --- --- Name: refresh_tokens refresh_tokens_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.refresh_tokens - ADD CONSTRAINT refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE; - - --- --- Name: saml_providers saml_providers_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.saml_providers - ADD CONSTRAINT saml_providers_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; - - --- --- Name: saml_relay_states saml_relay_states_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.saml_relay_states - ADD CONSTRAINT saml_relay_states_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; - - --- --- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.sessions - ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; - - --- --- Name: sso_domains sso_domains_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin --- - -ALTER TABLE ONLY auth.sso_domains - ADD CONSTRAINT sso_domains_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; - - --- --- Name: Reaction Reaction_wallpaperId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public."Reaction" - ADD CONSTRAINT "Reaction_wallpaperId_fkey" FOREIGN KEY ("wallpaperId") REFERENCES public."Wallpaper"(id) ON DELETE CASCADE; - - --- --- Name: buckets buckets_owner_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.buckets - ADD CONSTRAINT buckets_owner_fkey FOREIGN KEY (owner) REFERENCES auth.users(id); - - --- --- Name: objects objects_bucketId_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.objects - ADD CONSTRAINT "objects_bucketId_fkey" FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id); - - --- --- Name: objects objects_owner_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE ONLY storage.objects - ADD CONSTRAINT objects_owner_fkey FOREIGN KEY (owner) REFERENCES auth.users(id); - - --- --- Name: SupportRequest Anyone can insert a row; Type: POLICY; Schema: public; Owner: postgres --- - -CREATE POLICY " Anyone can insert a row" ON public."SupportRequest" FOR INSERT TO anon WITH CHECK (true); - - --- --- Name: Wallpaper Anyone can insert a row; Type: POLICY; Schema: public; Owner: postgres --- - -CREATE POLICY " Anyone can insert a row" ON public."Wallpaper" FOR INSERT TO anon WITH CHECK (true); - - --- --- Name: Client Anyone can insert a row; Type: POLICY; Schema: public; Owner: postgres --- - -CREATE POLICY "Anyone can insert a row" ON public."Client" FOR INSERT TO anon WITH CHECK (true); - - --- --- Name: Reaction Anyone can insert a row; Type: POLICY; Schema: public; Owner: postgres --- - -CREATE POLICY "Anyone can insert a row" ON public."Reaction" FOR INSERT TO anon WITH CHECK (true); - - --- --- Name: Site Anyone can insert a row; Type: POLICY; Schema: public; Owner: postgres --- - -CREATE POLICY "Anyone can insert a row" ON public."Site" FOR INSERT TO anon WITH CHECK (true); - - --- --- Name: Client; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Client" ENABLE ROW LEVEL SECURITY; - --- --- Name: Prompt; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Prompt" ENABLE ROW LEVEL SECURITY; - --- --- Name: Reaction; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Reaction" ENABLE ROW LEVEL SECURITY; - --- --- Name: Site; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Site" ENABLE ROW LEVEL SECURITY; - --- --- Name: SupportRequest; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."SupportRequest" ENABLE ROW LEVEL SECURITY; - --- --- Name: Value; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Value" ENABLE ROW LEVEL SECURITY; - --- --- Name: Wallpaper; Type: ROW SECURITY; Schema: public; Owner: postgres --- - -ALTER TABLE public."Wallpaper" ENABLE ROW LEVEL SECURITY; - --- --- Name: buckets; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE storage.buckets ENABLE ROW LEVEL SECURITY; - --- --- Name: migrations; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE storage.migrations ENABLE ROW LEVEL SECURITY; - --- --- Name: objects; Type: ROW SECURITY; Schema: storage; Owner: supabase_storage_admin --- - -ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY; - --- --- Name: supabase_realtime; Type: PUBLICATION; Schema: -; Owner: postgres --- - -CREATE PUBLICATION supabase_realtime WITH (publish = 'insert, update, delete, truncate'); - - -ALTER PUBLICATION supabase_realtime OWNER TO postgres; - --- --- Name: SCHEMA auth; Type: ACL; Schema: -; Owner: supabase_admin --- - -GRANT USAGE ON SCHEMA auth TO anon; -GRANT USAGE ON SCHEMA auth TO authenticated; -GRANT USAGE ON SCHEMA auth TO service_role; -GRANT ALL ON SCHEMA auth TO supabase_auth_admin; -GRANT ALL ON SCHEMA auth TO dashboard_user; -GRANT ALL ON SCHEMA auth TO postgres; - - --- --- Name: SCHEMA extensions; Type: ACL; Schema: -; Owner: postgres --- - -GRANT USAGE ON SCHEMA extensions TO anon; -GRANT USAGE ON SCHEMA extensions TO authenticated; -GRANT USAGE ON SCHEMA extensions TO service_role; -GRANT ALL ON SCHEMA extensions TO dashboard_user; - - --- --- Name: SCHEMA graphql_public; Type: ACL; Schema: -; Owner: supabase_admin --- - -GRANT USAGE ON SCHEMA graphql_public TO postgres; -GRANT USAGE ON SCHEMA graphql_public TO anon; -GRANT USAGE ON SCHEMA graphql_public TO authenticated; -GRANT USAGE ON SCHEMA graphql_public TO service_role; - - --- --- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner --- - -GRANT USAGE ON SCHEMA public TO postgres; -GRANT USAGE ON SCHEMA public TO anon; -GRANT USAGE ON SCHEMA public TO authenticated; -GRANT USAGE ON SCHEMA public TO service_role; - - --- --- Name: SCHEMA realtime; Type: ACL; Schema: -; Owner: supabase_admin --- - -GRANT USAGE ON SCHEMA realtime TO postgres; - - --- --- Name: SCHEMA storage; Type: ACL; Schema: -; Owner: supabase_admin --- - -GRANT ALL ON SCHEMA storage TO postgres; -GRANT USAGE ON SCHEMA storage TO anon; -GRANT USAGE ON SCHEMA storage TO authenticated; -GRANT USAGE ON SCHEMA storage TO service_role; -GRANT ALL ON SCHEMA storage TO supabase_storage_admin; -GRANT ALL ON SCHEMA storage TO dashboard_user; - - --- --- Name: FUNCTION email(); Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON FUNCTION auth.email() TO dashboard_user; - - --- --- Name: FUNCTION jwt(); Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON FUNCTION auth.jwt() TO postgres; -GRANT ALL ON FUNCTION auth.jwt() TO dashboard_user; - - --- --- Name: FUNCTION role(); Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON FUNCTION auth.role() TO dashboard_user; - - --- --- Name: FUNCTION uid(); Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON FUNCTION auth.uid() TO dashboard_user; - - --- --- Name: FUNCTION algorithm_sign(signables text, secret text, algorithm text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.algorithm_sign(signables text, secret text, algorithm text) FROM postgres; -GRANT ALL ON FUNCTION extensions.algorithm_sign(signables text, secret text, algorithm text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.algorithm_sign(signables text, secret text, algorithm text) TO dashboard_user; - - --- --- Name: FUNCTION armor(bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.armor(bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.armor(bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.armor(bytea) TO dashboard_user; - - --- --- Name: FUNCTION armor(bytea, text[], text[]); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.armor(bytea, text[], text[]) FROM postgres; -GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.armor(bytea, text[], text[]) TO dashboard_user; - - --- --- Name: FUNCTION crypt(text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.crypt(text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.crypt(text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.crypt(text, text) TO dashboard_user; - - --- --- Name: FUNCTION dearmor(text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.dearmor(text) FROM postgres; -GRANT ALL ON FUNCTION extensions.dearmor(text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.dearmor(text) TO dashboard_user; - - --- --- Name: FUNCTION decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.decrypt(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION decrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.decrypt_iv(bytea, bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION digest(bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.digest(bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.digest(bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION digest(text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.digest(text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.digest(text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.digest(text, text) TO dashboard_user; - - --- --- Name: FUNCTION encrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.encrypt(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION encrypt_iv(bytea, bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.encrypt_iv(bytea, bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION gen_random_bytes(integer); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.gen_random_bytes(integer) FROM postgres; -GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.gen_random_bytes(integer) TO dashboard_user; - - --- --- Name: FUNCTION gen_random_uuid(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.gen_random_uuid() FROM postgres; -GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.gen_random_uuid() TO dashboard_user; - - --- --- Name: FUNCTION gen_salt(text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.gen_salt(text) FROM postgres; -GRANT ALL ON FUNCTION extensions.gen_salt(text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.gen_salt(text) TO dashboard_user; - - --- --- Name: FUNCTION gen_salt(text, integer); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.gen_salt(text, integer) FROM postgres; -GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.gen_salt(text, integer) TO dashboard_user; - - --- --- Name: FUNCTION grant_pg_cron_access(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.grant_pg_cron_access() FROM postgres; -GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.grant_pg_cron_access() TO dashboard_user; - - --- --- Name: FUNCTION grant_pg_graphql_access(); Type: ACL; Schema: extensions; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION extensions.grant_pg_graphql_access() TO postgres WITH GRANT OPTION; - - --- --- Name: FUNCTION grant_pg_net_access(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.grant_pg_net_access() FROM postgres; -GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.grant_pg_net_access() TO dashboard_user; - - --- --- Name: FUNCTION hmac(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.hmac(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.hmac(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION hmac(text, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.hmac(text, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.hmac(text, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision) FROM postgres; -GRANT ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pg_stat_statements(showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision) TO dashboard_user; - - --- --- Name: FUNCTION pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) FROM postgres; -GRANT ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pg_stat_statements_info(OUT dealloc bigint, OUT stats_reset timestamp with time zone) TO dashboard_user; - - --- --- Name: FUNCTION pg_stat_statements_reset(userid oid, dbid oid, queryid bigint); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint) FROM postgres; -GRANT ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pg_stat_statements_reset(userid oid, dbid oid, queryid bigint) TO dashboard_user; - - --- --- Name: FUNCTION pgp_armor_headers(text, OUT key text, OUT value text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_armor_headers(text, OUT key text, OUT value text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_key_id(bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_key_id(bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_key_id(bytea) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt(bytea, bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt(bytea, bytea, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_decrypt_bytea(bytea, bytea, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_encrypt(text, bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_encrypt(text, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt(text, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea) TO dashboard_user; - - --- --- Name: FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_pub_encrypt_bytea(bytea, bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_decrypt(bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_decrypt(bytea, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt(bytea, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_decrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_decrypt_bytea(bytea, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_encrypt(text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_encrypt(text, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt(text, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text) TO dashboard_user; - - --- --- Name: FUNCTION pgp_sym_encrypt_bytea(bytea, text, text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) FROM postgres; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.pgp_sym_encrypt_bytea(bytea, text, text) TO dashboard_user; - - --- --- Name: FUNCTION pgrst_ddl_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION extensions.pgrst_ddl_watch() TO postgres WITH GRANT OPTION; - - --- --- Name: FUNCTION pgrst_drop_watch(); Type: ACL; Schema: extensions; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION extensions.pgrst_drop_watch() TO postgres WITH GRANT OPTION; - - --- --- Name: FUNCTION set_graphql_placeholder(); Type: ACL; Schema: extensions; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION extensions.set_graphql_placeholder() TO postgres WITH GRANT OPTION; - - --- --- Name: FUNCTION sign(payload json, secret text, algorithm text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.sign(payload json, secret text, algorithm text) FROM postgres; -GRANT ALL ON FUNCTION extensions.sign(payload json, secret text, algorithm text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.sign(payload json, secret text, algorithm text) TO dashboard_user; - - --- --- Name: FUNCTION try_cast_double(inp text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.try_cast_double(inp text) FROM postgres; -GRANT ALL ON FUNCTION extensions.try_cast_double(inp text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.try_cast_double(inp text) TO dashboard_user; - - --- --- Name: FUNCTION url_decode(data text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.url_decode(data text) FROM postgres; -GRANT ALL ON FUNCTION extensions.url_decode(data text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.url_decode(data text) TO dashboard_user; - - --- --- Name: FUNCTION url_encode(data bytea); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.url_encode(data bytea) FROM postgres; -GRANT ALL ON FUNCTION extensions.url_encode(data bytea) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.url_encode(data bytea) TO dashboard_user; - - --- --- Name: FUNCTION uuid_generate_v1(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_generate_v1() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_generate_v1() TO dashboard_user; - - --- --- Name: FUNCTION uuid_generate_v1mc(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_generate_v1mc() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_generate_v1mc() TO dashboard_user; - - --- --- Name: FUNCTION uuid_generate_v3(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_generate_v3(namespace uuid, name text) TO dashboard_user; - - --- --- Name: FUNCTION uuid_generate_v4(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_generate_v4() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_generate_v4() TO dashboard_user; - - --- --- Name: FUNCTION uuid_generate_v5(namespace uuid, name text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_generate_v5(namespace uuid, name text) TO dashboard_user; - - --- --- Name: FUNCTION uuid_nil(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_nil() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_nil() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_nil() TO dashboard_user; - - --- --- Name: FUNCTION uuid_ns_dns(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_ns_dns() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_ns_dns() TO dashboard_user; - - --- --- Name: FUNCTION uuid_ns_oid(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_ns_oid() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_ns_oid() TO dashboard_user; - - --- --- Name: FUNCTION uuid_ns_url(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_ns_url() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_ns_url() TO dashboard_user; - - --- --- Name: FUNCTION uuid_ns_x500(); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.uuid_ns_x500() FROM postgres; -GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.uuid_ns_x500() TO dashboard_user; - - --- --- Name: FUNCTION verify(token text, secret text, algorithm text); Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON FUNCTION extensions.verify(token text, secret text, algorithm text) FROM postgres; -GRANT ALL ON FUNCTION extensions.verify(token text, secret text, algorithm text) TO postgres WITH GRANT OPTION; -GRANT ALL ON FUNCTION extensions.verify(token text, secret text, algorithm text) TO dashboard_user; - - --- --- Name: FUNCTION comment_directive(comment_ text); Type: ACL; Schema: graphql; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION graphql.comment_directive(comment_ text) TO postgres; -GRANT ALL ON FUNCTION graphql.comment_directive(comment_ text) TO anon; -GRANT ALL ON FUNCTION graphql.comment_directive(comment_ text) TO authenticated; -GRANT ALL ON FUNCTION graphql.comment_directive(comment_ text) TO service_role; - - --- --- Name: FUNCTION exception(message text); Type: ACL; Schema: graphql; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION graphql.exception(message text) TO postgres; -GRANT ALL ON FUNCTION graphql.exception(message text) TO anon; -GRANT ALL ON FUNCTION graphql.exception(message text) TO authenticated; -GRANT ALL ON FUNCTION graphql.exception(message text) TO service_role; - - --- --- Name: FUNCTION get_schema_version(); Type: ACL; Schema: graphql; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION graphql.get_schema_version() TO postgres; -GRANT ALL ON FUNCTION graphql.get_schema_version() TO anon; -GRANT ALL ON FUNCTION graphql.get_schema_version() TO authenticated; -GRANT ALL ON FUNCTION graphql.get_schema_version() TO service_role; - - --- --- Name: FUNCTION increment_schema_version(); Type: ACL; Schema: graphql; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION graphql.increment_schema_version() TO postgres; -GRANT ALL ON FUNCTION graphql.increment_schema_version() TO anon; -GRANT ALL ON FUNCTION graphql.increment_schema_version() TO authenticated; -GRANT ALL ON FUNCTION graphql.increment_schema_version() TO service_role; - - --- --- Name: FUNCTION graphql("operationName" text, query text, variables jsonb, extensions jsonb); Type: ACL; Schema: graphql_public; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO postgres; -GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO anon; -GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO authenticated; -GRANT ALL ON FUNCTION graphql_public.graphql("operationName" text, query text, variables jsonb, extensions jsonb) TO service_role; - - --- --- Name: FUNCTION get_auth(p_usename text); Type: ACL; Schema: pgbouncer; Owner: postgres --- - -REVOKE ALL ON FUNCTION pgbouncer.get_auth(p_usename text) FROM PUBLIC; -GRANT ALL ON FUNCTION pgbouncer.get_auth(p_usename text) TO pgbouncer; - - --- --- Name: FUNCTION crypto_aead_det_decrypt(message bytea, additional bytea, key_uuid uuid, nonce bytea); Type: ACL; Schema: pgsodium; Owner: pgsodium_keymaker --- - -GRANT ALL ON FUNCTION pgsodium.crypto_aead_det_decrypt(message bytea, additional bytea, key_uuid uuid, nonce bytea) TO service_role; - - --- --- Name: FUNCTION crypto_aead_det_encrypt(message bytea, additional bytea, key_uuid uuid, nonce bytea); Type: ACL; Schema: pgsodium; Owner: pgsodium_keymaker --- - -GRANT ALL ON FUNCTION pgsodium.crypto_aead_det_encrypt(message bytea, additional bytea, key_uuid uuid, nonce bytea) TO service_role; - - --- --- Name: FUNCTION crypto_aead_det_keygen(); Type: ACL; Schema: pgsodium; Owner: supabase_admin --- - -GRANT ALL ON FUNCTION pgsodium.crypto_aead_det_keygen() TO service_role; - - --- --- Name: FUNCTION extension(name text); Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON FUNCTION storage.extension(name text) TO anon; -GRANT ALL ON FUNCTION storage.extension(name text) TO authenticated; -GRANT ALL ON FUNCTION storage.extension(name text) TO service_role; -GRANT ALL ON FUNCTION storage.extension(name text) TO dashboard_user; -GRANT ALL ON FUNCTION storage.extension(name text) TO postgres; - - --- --- Name: FUNCTION filename(name text); Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON FUNCTION storage.filename(name text) TO anon; -GRANT ALL ON FUNCTION storage.filename(name text) TO authenticated; -GRANT ALL ON FUNCTION storage.filename(name text) TO service_role; -GRANT ALL ON FUNCTION storage.filename(name text) TO dashboard_user; -GRANT ALL ON FUNCTION storage.filename(name text) TO postgres; - - --- --- Name: FUNCTION foldername(name text); Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON FUNCTION storage.foldername(name text) TO anon; -GRANT ALL ON FUNCTION storage.foldername(name text) TO authenticated; -GRANT ALL ON FUNCTION storage.foldername(name text) TO service_role; -GRANT ALL ON FUNCTION storage.foldername(name text) TO dashboard_user; -GRANT ALL ON FUNCTION storage.foldername(name text) TO postgres; - - --- --- Name: TABLE audit_log_entries; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.audit_log_entries TO dashboard_user; -GRANT ALL ON TABLE auth.audit_log_entries TO postgres; - - --- --- Name: TABLE flow_state; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.flow_state TO postgres; -GRANT ALL ON TABLE auth.flow_state TO dashboard_user; - - --- --- Name: TABLE identities; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.identities TO postgres; -GRANT ALL ON TABLE auth.identities TO dashboard_user; - - --- --- Name: TABLE instances; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.instances TO dashboard_user; -GRANT ALL ON TABLE auth.instances TO postgres; - - --- --- Name: TABLE mfa_amr_claims; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.mfa_amr_claims TO postgres; -GRANT ALL ON TABLE auth.mfa_amr_claims TO dashboard_user; - - --- --- Name: TABLE mfa_challenges; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.mfa_challenges TO postgres; -GRANT ALL ON TABLE auth.mfa_challenges TO dashboard_user; - - --- --- Name: TABLE mfa_factors; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.mfa_factors TO postgres; -GRANT ALL ON TABLE auth.mfa_factors TO dashboard_user; - - --- --- Name: TABLE refresh_tokens; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.refresh_tokens TO dashboard_user; -GRANT ALL ON TABLE auth.refresh_tokens TO postgres; - - --- --- Name: SEQUENCE refresh_tokens_id_seq; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO dashboard_user; -GRANT ALL ON SEQUENCE auth.refresh_tokens_id_seq TO postgres; - - --- --- Name: TABLE saml_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.saml_providers TO postgres; -GRANT ALL ON TABLE auth.saml_providers TO dashboard_user; - - --- --- Name: TABLE saml_relay_states; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.saml_relay_states TO postgres; -GRANT ALL ON TABLE auth.saml_relay_states TO dashboard_user; - - --- --- Name: TABLE schema_migrations; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.schema_migrations TO dashboard_user; -GRANT ALL ON TABLE auth.schema_migrations TO postgres; - - --- --- Name: TABLE sessions; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.sessions TO postgres; -GRANT ALL ON TABLE auth.sessions TO dashboard_user; - - --- --- Name: TABLE sso_domains; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.sso_domains TO postgres; -GRANT ALL ON TABLE auth.sso_domains TO dashboard_user; - - --- --- Name: TABLE sso_providers; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.sso_providers TO postgres; -GRANT ALL ON TABLE auth.sso_providers TO dashboard_user; - - --- --- Name: TABLE users; Type: ACL; Schema: auth; Owner: supabase_auth_admin --- - -GRANT ALL ON TABLE auth.users TO dashboard_user; -GRANT ALL ON TABLE auth.users TO postgres; - - --- --- Name: TABLE pg_stat_statements; Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON TABLE extensions.pg_stat_statements FROM postgres; -GRANT ALL ON TABLE extensions.pg_stat_statements TO postgres WITH GRANT OPTION; -GRANT ALL ON TABLE extensions.pg_stat_statements TO dashboard_user; - - --- --- Name: TABLE pg_stat_statements_info; Type: ACL; Schema: extensions; Owner: postgres --- - -REVOKE ALL ON TABLE extensions.pg_stat_statements_info FROM postgres; -GRANT ALL ON TABLE extensions.pg_stat_statements_info TO postgres WITH GRANT OPTION; -GRANT ALL ON TABLE extensions.pg_stat_statements_info TO dashboard_user; - - --- --- Name: SEQUENCE seq_schema_version; Type: ACL; Schema: graphql; Owner: supabase_admin --- - -GRANT ALL ON SEQUENCE graphql.seq_schema_version TO postgres; -GRANT ALL ON SEQUENCE graphql.seq_schema_version TO anon; -GRANT ALL ON SEQUENCE graphql.seq_schema_version TO authenticated; -GRANT ALL ON SEQUENCE graphql.seq_schema_version TO service_role; - - --- --- Name: TABLE decrypted_key; Type: ACL; Schema: pgsodium; Owner: supabase_admin --- - -GRANT ALL ON TABLE pgsodium.decrypted_key TO pgsodium_keyholder; - - --- --- Name: TABLE masking_rule; Type: ACL; Schema: pgsodium; Owner: supabase_admin --- - -GRANT ALL ON TABLE pgsodium.masking_rule TO pgsodium_keyholder; - - --- --- Name: TABLE mask_columns; Type: ACL; Schema: pgsodium; Owner: supabase_admin --- - -GRANT ALL ON TABLE pgsodium.mask_columns TO pgsodium_keyholder; - - --- --- Name: TABLE "Client"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Client" TO anon; -GRANT ALL ON TABLE public."Client" TO authenticated; -GRANT ALL ON TABLE public."Client" TO service_role; - - --- --- Name: TABLE "Prompt"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Prompt" TO anon; -GRANT ALL ON TABLE public."Prompt" TO authenticated; -GRANT ALL ON TABLE public."Prompt" TO service_role; - - --- --- Name: SEQUENCE "Prompt_id_seq"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON SEQUENCE public."Prompt_id_seq" TO anon; -GRANT ALL ON SEQUENCE public."Prompt_id_seq" TO authenticated; -GRANT ALL ON SEQUENCE public."Prompt_id_seq" TO service_role; - - --- --- Name: TABLE "Prompt_stats"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Prompt_stats" TO anon; -GRANT ALL ON TABLE public."Prompt_stats" TO authenticated; -GRANT ALL ON TABLE public."Prompt_stats" TO service_role; - - --- --- Name: TABLE "Reaction"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Reaction" TO anon; -GRANT ALL ON TABLE public."Reaction" TO authenticated; -GRANT ALL ON TABLE public."Reaction" TO service_role; - - --- --- Name: TABLE "Site"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Site" TO anon; -GRANT ALL ON TABLE public."Site" TO authenticated; -GRANT ALL ON TABLE public."Site" TO service_role; - - --- --- Name: SEQUENCE "Site_id_seq"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON SEQUENCE public."Site_id_seq" TO anon; -GRANT ALL ON SEQUENCE public."Site_id_seq" TO authenticated; -GRANT ALL ON SEQUENCE public."Site_id_seq" TO service_role; - - --- --- Name: TABLE "SupportRequest"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."SupportRequest" TO anon; -GRANT ALL ON TABLE public."SupportRequest" TO authenticated; -GRANT ALL ON TABLE public."SupportRequest" TO service_role; - - --- --- Name: SEQUENCE "SupportRequest_id_seq"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON SEQUENCE public."SupportRequest_id_seq" TO anon; -GRANT ALL ON SEQUENCE public."SupportRequest_id_seq" TO authenticated; -GRANT ALL ON SEQUENCE public."SupportRequest_id_seq" TO service_role; - - --- --- Name: TABLE "Value"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Value" TO anon; -GRANT ALL ON TABLE public."Value" TO authenticated; -GRANT ALL ON TABLE public."Value" TO service_role; - - --- --- Name: SEQUENCE "Value_id_seq"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON SEQUENCE public."Value_id_seq" TO anon; -GRANT ALL ON SEQUENCE public."Value_id_seq" TO authenticated; -GRANT ALL ON SEQUENCE public."Value_id_seq" TO service_role; - - --- --- Name: TABLE "Wallpaper"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Wallpaper" TO anon; -GRANT ALL ON TABLE public."Wallpaper" TO authenticated; -GRANT ALL ON TABLE public."Wallpaper" TO service_role; - - --- --- Name: TABLE "Wallpaper_random"; Type: ACL; Schema: public; Owner: postgres --- - -GRANT ALL ON TABLE public."Wallpaper_random" TO anon; -GRANT ALL ON TABLE public."Wallpaper_random" TO authenticated; -GRANT ALL ON TABLE public."Wallpaper_random" TO service_role; - - --- --- Name: TABLE buckets; Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON TABLE storage.buckets TO anon; -GRANT ALL ON TABLE storage.buckets TO authenticated; -GRANT ALL ON TABLE storage.buckets TO service_role; -GRANT ALL ON TABLE storage.buckets TO postgres; - - --- --- Name: TABLE migrations; Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON TABLE storage.migrations TO anon; -GRANT ALL ON TABLE storage.migrations TO authenticated; -GRANT ALL ON TABLE storage.migrations TO service_role; -GRANT ALL ON TABLE storage.migrations TO postgres; - - --- --- Name: TABLE objects; Type: ACL; Schema: storage; Owner: supabase_storage_admin --- - -GRANT ALL ON TABLE storage.objects TO anon; -GRANT ALL ON TABLE storage.objects TO authenticated; -GRANT ALL ON TABLE storage.objects TO service_role; -GRANT ALL ON TABLE storage.objects TO postgres; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON SEQUENCES TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON FUNCTIONS TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: auth; Owner: supabase_auth_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_auth_admin IN SCHEMA auth GRANT ALL ON TABLES TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON SEQUENCES TO postgres WITH GRANT OPTION; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON FUNCTIONS TO postgres WITH GRANT OPTION; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: extensions; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA extensions GRANT ALL ON TABLES TO postgres WITH GRANT OPTION; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON SEQUENCES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON FUNCTIONS TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql GRANT ALL ON TABLES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON SEQUENCES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON FUNCTIONS TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: graphql_public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA graphql_public GRANT ALL ON TABLES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: pgsodium; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA pgsodium GRANT ALL ON SEQUENCES TO pgsodium_keyholder; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: pgsodium; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA pgsodium GRANT ALL ON TABLES TO pgsodium_keyholder; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: pgsodium_masks; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA pgsodium_masks GRANT ALL ON SEQUENCES TO pgsodium_keyiduser; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: pgsodium_masks; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA pgsodium_masks GRANT ALL ON FUNCTIONS TO pgsodium_keyiduser; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: pgsodium_masks; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA pgsodium_masks GRANT ALL ON TABLES TO pgsodium_keyiduser; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON SEQUENCES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON FUNCTIONS TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA public GRANT ALL ON TABLES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON SEQUENCES TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON FUNCTIONS TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: realtime; Owner: supabase_admin --- - -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE supabase_admin IN SCHEMA realtime GRANT ALL ON TABLES TO dashboard_user; - - --- --- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: storage; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON SEQUENCES TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR FUNCTIONS; Type: DEFAULT ACL; Schema: storage; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON FUNCTIONS TO service_role; - - --- --- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: storage; Owner: postgres --- - -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO postgres; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO anon; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO authenticated; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA storage GRANT ALL ON TABLES TO service_role; - - --- --- Name: issue_graphql_placeholder; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin --- - -CREATE EVENT TRIGGER issue_graphql_placeholder ON sql_drop - WHEN TAG IN ('DROP EXTENSION') - EXECUTE FUNCTION extensions.set_graphql_placeholder(); - - -ALTER EVENT TRIGGER issue_graphql_placeholder OWNER TO supabase_admin; - --- --- Name: issue_pg_cron_access; Type: EVENT TRIGGER; Schema: -; Owner: postgres --- - -CREATE EVENT TRIGGER issue_pg_cron_access ON ddl_command_end - WHEN TAG IN ('CREATE SCHEMA') - EXECUTE FUNCTION extensions.grant_pg_cron_access(); - - -ALTER EVENT TRIGGER issue_pg_cron_access OWNER TO postgres; - --- --- Name: issue_pg_graphql_access; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin --- - -CREATE EVENT TRIGGER issue_pg_graphql_access ON ddl_command_end - WHEN TAG IN ('CREATE FUNCTION') - EXECUTE FUNCTION extensions.grant_pg_graphql_access(); - - -ALTER EVENT TRIGGER issue_pg_graphql_access OWNER TO supabase_admin; - --- --- Name: issue_pg_net_access; Type: EVENT TRIGGER; Schema: -; Owner: postgres --- - -CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end - WHEN TAG IN ('CREATE EXTENSION') - EXECUTE FUNCTION extensions.grant_pg_net_access(); - - -ALTER EVENT TRIGGER issue_pg_net_access OWNER TO postgres; - --- --- Name: pgrst_ddl_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin --- - -CREATE EVENT TRIGGER pgrst_ddl_watch ON ddl_command_end - EXECUTE FUNCTION extensions.pgrst_ddl_watch(); - - -ALTER EVENT TRIGGER pgrst_ddl_watch OWNER TO supabase_admin; - --- --- Name: pgrst_drop_watch; Type: EVENT TRIGGER; Schema: -; Owner: supabase_admin --- - -CREATE EVENT TRIGGER pgrst_drop_watch ON sql_drop - EXECUTE FUNCTION extensions.pgrst_drop_watch(); - - -ALTER EVENT TRIGGER pgrst_drop_watch OWNER TO supabase_admin; - --- --- PostgreSQL database dump complete --- - diff --git a/design/logo/ai-web-maker.svg b/design/logo/ai-web-maker.svg deleted file mode 100644 index bd4a2e6099..0000000000 --- a/design/logo/ai-web-maker.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/design/logo/design.svg b/design/logo/design.svg deleted file mode 100644 index 6b7c027b70..0000000000 --- a/design/logo/design.svg +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - GPT - diff --git a/design/logo/webgpt.design.svg b/design/logo/webgpt.design.svg new file mode 100644 index 0000000000..9442a01764 --- /dev/null +++ b/design/logo/webgpt.design.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + G + T + P + G + T + P + + Break text into path:Ctrl shift c + + diff --git a/design/logo/webgpt.svg b/design/logo/webgpt.svg deleted file mode 100644 index 26870e83f9..0000000000 --- a/design/logo/webgpt.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - GPT - diff --git a/design/spinner/small.png b/design/spinner/small.png new file mode 100644 index 0000000000..777b4af2fb Binary files /dev/null and b/design/spinner/small.png differ diff --git a/documents/contact.md b/documents/contact.md index a9fd6dd150..d75e0ab75c 100644 --- a/documents/contact.md +++ b/documents/contact.md @@ -2,13 +2,15 @@ ## Contact -- [Email](mailto:pavol@hejny.org) -- [Messenger](https://m.me/hejny) -- [Telegram](https://t.me/hejny) -- https://www.pavolhejny.com/contact +- [WebGPT.cz](https://webgpt.cz/) +- [pavol@webgpt.cz](mailto:pavol@webgpt.cz) +- [jiri@webgpt.cz](mailto:jiri@webgpt.cz) -## Social 1-2i +## Social Networks -- [Facebook](https://www.facebook.com/profile.php?id=61551015609140) -- [Instagram](https://www.instagram.com/_1_2i_/) -- [LinkedIn](https://www.linkedin.com/company/1-2i/) +- [Facebook](https://www.facebook.com/webgptorg) +- [LinkedIn](https://www.linkedin.com/company/98725909/) +- [GitHub](https://github.com/hejny/webgpt) +- [PromptBook](https://github.com/webgptorg/promptbook) + + diff --git a/documents/jiri-jahn.md b/documents/jiri-jahn.md new file mode 100644 index 0000000000..18b1abe928 --- /dev/null +++ b/documents/jiri-jahn.md @@ -0,0 +1,3 @@ +# Jiří Jahn + +I'm a math major who enjoys solving problems. I like to look for analogies between seemingly unrelated things, especially if it helps to elegantly solve a problem. I believe that humanity is currently using only about 1% of its technological potential, and I am ready to change that. diff --git a/documents/webs.md b/documents/webs.md index 74d200740d..f2afb4cdaa 100644 --- a/documents/webs.md +++ b/documents/webs.md @@ -1,4 +1,4 @@ -# 📃 Webs using AiAi +# 📃 Webs made by WebGPT - https://pavolhejny.com/ - https://www.ainautes.com/ diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000000..060a85a240 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,18 @@ +module.exports = { + apps: [ + { + name: 'promptbook', + namespace: 'webgpt', + script: './promptbook-server/server.bash', + exec_mode: 'fork', + interpreter: 'bash', + }, + { + name: 'promptimage', + namespace: 'webgpt', + script: './promptimage-server/server.bash', + exec_mode: 'fork', + interpreter: 'bash', + }, + ], +}; diff --git a/locales/cs/common.yml b/locales/cs/common.yml new file mode 100644 index 0000000000..be003cdea4 --- /dev/null +++ b/locales/cs/common.yml @@ -0,0 +1 @@ +# TODO: To be done from en version \ No newline at end of file diff --git a/locales/en/common.yml b/locales/en/common.yml new file mode 100644 index 0000000000..6bb1ee02e0 --- /dev/null +++ b/locales/en/common.yml @@ -0,0 +1,76 @@ +title: > + **Your web** +# @see https://sharegpt.com/c/Gsmaslg +description: > + Our team is at the forefront of the AI consulting revolution, + helping clients navigate the complex landscape of + emerging technologies and unlock the potential of AI for their businesses. + +Welcome: + content: > + This is how your web can look like! + + 🕶 + + We're passionate about staying on the cutting edge of emerging technologies and helping our clients unlock the full potential of AI for their businesses. + + 🚀 + + As experts in the field of AI, we understand that the technology is constantly evolving and can be complex to navigate. + That's why we're here to help guide our clients every step of the way, from ideation to implementation, and beyond. + + 🤖 + + With our deep understanding of the latest trends in AI and machine learning, + we're uniquely positioned to help clients stay ahead of the curve and take advantage of new opportunities in the digital landscape. + We're always on the lookout for innovative ways to leverage AI to solve our clients' toughest challenges. + + 💡 + + At the heart of our approach is a commitment to collaboration and partnership with our clients. + We work closely with each client to understand their needs, goals, and challenges, + and develop customized solutions that deliver real value and impact. + We're here to be a trusted partner, helping our clients navigate the complex world of AI with confidence. + + 🤝 + + Our team is made up of experts in AI, data science, engineering, and business strategy, + giving us the unique ability to offer end-to-end consulting services that cover every aspect of AI implementation and integration. + Whether you're just starting to explore the potential of AI, or you're already using it in your business and want to take it to the next level, + we have the expertise to help you get there. + + 👨‍💼 + + Our mission is to democratize access to AI, + making it accessible and understandable for businesses of all sizes and industries. + We believe that AI has the power to transform businesses and change lives, + and we're committed to making sure that everyone has the opportunity to benefit from this exciting technology. + + 🌟 + + Our work is driven by a passion for innovation and a commitment to excellence. + We strive to push the boundaries of what's possible with AI, and help our clients achieve new heights of success and growth. + When you work with us, you can expect nothing but the best. + + 🏆 + + back-home: Back home + +Contact: + title: Get in touch! + content: null + more: More + +Footer: + home: Home + gallery: Gallery + contact: Contact + technical: Technical + +TechnicalInfo: + title: About + content: Technical info about the page + +Sample: + title: Sample section + content: Sample text with [sample link](/sample) diff --git a/next-i18next.config.js b/next-i18next.config.js new file mode 100644 index 0000000000..dc630ed3b9 --- /dev/null +++ b/next-i18next.config.js @@ -0,0 +1,18 @@ +const { join } = require('path'); + +module.exports = { + i18n: { + defaultLocale: 'cs', // <- TODO: !! When using domains, switch defaultLocale back to 'en' + locales: ['en', 'cs'], + localeDetection: false, + }, + localePath: join(__dirname, 'locales'), + localeExtension: 'yml', + + // TODO: !! Use here domains webgpt.cz, 1-2i.com +}; + +/** + * TODO: Fallback locales @see https://github.com/i18next/next-i18next#fallback-locales + * TODO: https://github.com/i18next/next-i18next#4-declaring-namespace-dependencies + */ diff --git a/next.config.js b/next.config.js index 0c055bb849..5459fc1367 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,9 @@ const removeImports = require('next-remove-imports')(); +const { i18n } = require('./next-i18next.config'); /** @type {import('next').NextConfig} */ const nextConfig = { + i18n, reactStrictMode: true, experimental: { appDir: true, diff --git a/nonce b/nonce new file mode 100644 index 0000000000..70691a59e3 --- /dev/null +++ b/nonce @@ -0,0 +1 @@ +🚂🖤🌪️ diff --git a/other/articles/rozhovor-pro-kapler-o-ai.md b/other/articles/rozhovor-pro-kapler-o-ai.md deleted file mode 100644 index 7a7efe2780..0000000000 --- a/other/articles/rozhovor-pro-kapler-o-ai.md +++ /dev/null @@ -1,295 +0,0 @@ -# Povídání o generování webů, AI a budoucnosti - -> Rozhovor s [Pavolem Hejným](https://www.pavolhejny.com/) pro [Kapler o AI](https://www.kapler.cz/category/AI/) - -Před pár dny o sobě dal vědět [Pavol Hejný](https://www.pavolhejny.com/) s projektem na [generování webů pomomocí AI](https://webgpt.cz/). -Rozhodl jsem se ho vyzpovídat a zjistit, co ho k tomu vedlo, jak to funguje a co nás čeká v budoucnu. - -**Co si mají čtenáři představit pod tím, když mluvíš o kompletně generovaných webech** - -Rozhodně tím nemyslím velké webové aplikace, mám na mysli jednoduché prezentační weby které mají za cíl ukázat jednu konkrétní věc – typicky web kavárny !!!Pod Kaštanem, Osobní weby, weby jednoduchých událostí,... - -**Jak to funguje?** - -V principu je to spojení jazykového modelu, obrázkového generátoru, rozpoznání obrázků a několika dalších technologií. -Uživatel má vícero možností: - -- Mám **obrázek**, ten se mi analyzuje a na základě něj se vygeneruje zadaní, které mohu upravit -- Mám **zadání** a z něj se mi vygeneruje obrázek a web -- Mám **nápad**, ze kterého se vygeneruje zadaní -- Mám **Instagram** / Facebook / Starý web, který se mi přegeneruje do nové podoby -- Nemám **nic** a nechám se překvapit - -Samozřejmě je na pozadí mnoho dalších věcí, například analýza obrázku a sestavení palety barev, fontů a dalších věcí. - -**Jaké jsou výhody a nevýhody generování webů pomocí AI?** - -Je to hlavně o ekonomice a časové náročnosti. Pokud chci jednoduchý web, který má za cíl ukázat jednu konkrétní věc, tak je to ideální řešení. -Naopak pro složitější weby, e-shopy, webové aplikace to není. - -Obecně u prezentačních webů platí jedna věc – dokáží sežrat prakticky neomezené množství času a peněz bez zvyšování hodnoty. -Ostatně oba to známe z hackathonů, jednoduchá aplikace se dá udělat za pár hodin, ale pokud se chceš pustit do vylepšování, tak to může trvat nekonečně dlouho. U aplikací se to může vyplatit, ale u prezentačních webů to obvykle jsou utopené náklady. - -**A nedají se všechny tyhle věci udělat jen s ChatGPT?** - -Rozhodně ano, tohle ostatně na pozadí GPT API využívá. Zase je to jen o času. Pokud jsi majitelem malé pizzerie, máš se soustředit na nejlepší pizzu ne na to, jak napsat prompt, který napíše nejlepší text pro tvůj web. A pak je tu mnoho technických detailů, které jsou potřeba na webu správně - SEO, responzivita, rychlost, bezpečnost, přístupnost... není to raketová věda, ale to všechno je potřeba řešit. - -**Není lepší použít Wordpress nebo jiný redakční systém** - -Pro některé případy určitě je. Ale opět přichází na řadu stejná otázka, co SEO, responzivita, rychlost, bezpečnost, přístupnost,... WordPress (a jiné redakční systémy) tyhle věci řeší, ale je potřeba je nastavit, spravovat a aktualizovat. A zase je to otázka času, peněz a kapacity. - -Generativní AI nepřináší žádnou zásadní novou věc z hlediska kvality, revoluční je v tom, že pro průměrné úkoly dokáže jejich provedení řádově zlevnit a zrychlit. To může přínést i zásadní společenský problém do budoucna – výrazně se zvýší laťka a mnoho lidí dělající jednoduchou práci přijde o ekonomický benefit jejich času. - -**Jaké jsou největší výzvy při generování webů?** - -Velkou výzvou je "zkrocení" GPT k tomu, aby dělalo přesně to, co potřebuju. Dám příklad: - -- Pokud mám jednoduché zadání / prompt "Jaký zvuk dělá kočička", tak dostanu odpověď "Mňau" nebo ""Mňau"" _(v uvozovkách)_ případně "Kočička dělá "Mňau"" nebo něco podobného. -- Pokud mám komplexní prompt "Napiš mi komplení obsah webu v markdownu pro kavárnu {name}", tak se mi výrazně zvyšuje komplexita odpovědi a často nedostanu to, co chci. - -Jakmile je potřeba něco složitějšího, existují v principu čtyři metody, jak na to: - -- -- -- -- - - - -**A jaký je rozdíl mezi tvou knihovnou a desítkami jiných knihoven pro AutoGPT?** - - - -**Myslíš, že generativní AI ještě není na svém vrcholu?** - - - - - -**Jakým způsobem teda ovlivní AI jazyk a kulturu?** - - - -**Řekni něco víc o hře Towns, co jsi vyvíjel** - - - -**Řekni něco víc o modulech do Collboardu** - - - -**Nebylo by teda lepší generativní AI ve školách zakázat?** - - - - - - diff --git a/other/manual-prompts/TODO.txt b/other/manual-prompts/TODO.txt new file mode 100644 index 0000000000..34c638b33f --- /dev/null +++ b/other/manual-prompts/TODO.txt @@ -0,0 +1 @@ +TODO: Make propper promptbooks from this \ No newline at end of file diff --git a/prompts/templates/enhance-post.cs.prompt.txt b/other/manual-prompts/enhance-post.cs.md similarity index 100% rename from prompts/templates/enhance-post.cs.prompt.txt rename to other/manual-prompts/enhance-post.cs.md diff --git a/prompts/templates/enhance-post.en.prompt.txt b/other/manual-prompts/enhance-post.en.md similarity index 100% rename from prompts/templates/enhance-post.en.prompt.txt rename to other/manual-prompts/enhance-post.en.md diff --git a/prompts/templates/enhance-prompt.en.prompt.txt b/other/manual-prompts/enhance-prompt.en.md similarity index 100% rename from prompts/templates/enhance-prompt.en.prompt.txt rename to other/manual-prompts/enhance-prompt.en.md diff --git a/other/posts/2023-09-12.md b/other/posts/2023-09-12.md deleted file mode 100644 index 038c252c9b..0000000000 --- a/other/posts/2023-09-12.md +++ /dev/null @@ -1,37 +0,0 @@ -Wow, vůbec jsem nečekal, jak pozitivně byl přijat prototyp toolu, který jsem tu před týdnem ukazoval. -Ozvalo se mi mnoho lidí a už mám první platící zákazníky, což jsem u tak surového prototypu vůbec nečekal. - -Jednoduchá myšlenka: - -Potřebujete mít web? -Bez ohledu na to, zda jste právnická nebo fyzická osoba, v dnešní době je téměř nezbytné mít web. Ať už jste podnikatel, makléř, nebo organizujete nějakou událost, webová stránka je nástroj, který se vám rozhodně hodí. - -Klasický příklad může být oblíbená pizzerie na rohu. -Možná má skvělý web, možná ne. -Někde je web místní restaurace ostře vybroušený, někde je zase tupý jak zetlelý banán. **Pokud máte podnikání, chcete mít web, který funguje.** Nemusí to být vrcholný designérský kousek, ale měl by splnit svůj účel – prodávat nebo informovat ve stylu, který je vám i vašim zákazníkům blízký. Správným způsobem by se měl přepisovat do Googlu, měl by být sdíletelný, splňovat standardy přístupnosti,... - -V minulosti se každý web musel tvořit ručně, což bylo laboriozní. Poté přišla řada nástrojů, od WordPressu po Webflow, SolidPixels, Wix, které umožňují vytvářet weby i neprogramátorům. **Ale co lidé, kteří o webu nic moc nevědí a nechtějí se jím zabývat?** - -Pokud kóduju web, mohu udělat spoustu chyb. Pokud web skládám v Elementoru, mohu také udělat spoustu chyb. - -Co takhle mít webdesignéra k dispozici 24/7. -Stačí mu jen napsat, co byste chtěli, a on to udělá nebo navrhne lepší řešení. Už nemusíte řešit složitou administraci nebo jak uložit změnu otevírací doby tak, aby se web opět nerozbil na mobilu. Stačí napsat do políčka, že v pátek máte otevřeno od 10:00 do půlnoci. - -Pokud vás tento koncept zaujal, intenzivně pracuju na nástroji, který tohle všechno dokáže. - -https://webgpt.cz/new/from-image - -Není to jen demo nebo hezky nakreslená šablona, je to fungující prototyp. Samozřejmě, jako každý prototyp má své nedostatky. **Hledám první platících klienty, kteří by chtěli mít web i s AI web designérem**. Zároveň budou mít možnost být u zrodu nového unicornu 🦄 - -#AI #generativeai #generativeart #midjourney #chatgpt #gpt #future #nocode #lowcode #webdesign #prototype #startup - - diff --git a/other/screencasts/.gitignore b/other/screencasts/.gitignore new file mode 100644 index 0000000000..d43b42145f --- /dev/null +++ b/other/screencasts/.gitignore @@ -0,0 +1 @@ +ffmpeg.exe \ No newline at end of file diff --git a/other/screencasts/README.md b/other/screencasts/README.md new file mode 100644 index 0000000000..bf5f49a7fe --- /dev/null +++ b/other/screencasts/README.md @@ -0,0 +1,20 @@ +# 📺 Screencasts + +In this folder you can find screencasts of the project. + +To convert the videos to GIFs, use the following commands: + +```bash +cd other/screencasts +./make-gifs.bash +``` + +## Websites + +Websites generated on theese videos: + +- https://webgpt.cz/en/prompt-cookbook-2gf3q7x5x6yw (👍) +- https://webgpt.cz/en/prompt-prompter-2pqzjf7hp3on (❤) +- https://webgpt.cz/en/prompti-owl-2wwom6erl4yb +- https://webgpt.cz/en/prompt-power-2jann7qnvnbj +- https://webgpt.cz/en/prompt-space-2e5sremz5y2w diff --git a/other/screencasts/make-gifs.bash b/other/screencasts/make-gifs.bash new file mode 100644 index 0000000000..9588f0dec1 --- /dev/null +++ b/other/screencasts/make-gifs.bash @@ -0,0 +1,4 @@ +for file in *.webm; do + output_file="${file%.webm}.gif" + ./ffmpeg -i "$file" -filter:v "setpts=0.1*PTS" "$output_file" -y +done \ No newline at end of file diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.gif b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.gif new file mode 100644 index 0000000000..4e732f584f Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.gif differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.webm b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.webm new file mode 100644 index 0000000000..cefd4f5bff Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_46_17.webm differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.gif b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.gif new file mode 100644 index 0000000000..abae335e54 Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.gif differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.webm b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.webm new file mode 100644 index 0000000000..32a32d4c49 Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_48_16.webm differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.gif b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.gif new file mode 100644 index 0000000000..a741196c12 Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.gif differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.webm b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.webm new file mode 100644 index 0000000000..b4aa0f63ac Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_49_46.webm differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.gif b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.gif new file mode 100644 index 0000000000..84880d12e2 Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.gif differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.webm b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.webm new file mode 100644 index 0000000000..0a191a5405 Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_51_38.webm differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.gif b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.gif new file mode 100644 index 0000000000..c128f1332c Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.gif differ diff --git a/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.webm b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.webm new file mode 100644 index 0000000000..4ffda2d4ff Binary files /dev/null and b/other/screencasts/screencast-fiabciakcmgepblmdkmemdbbkilneeeh-2023.10.26-21_53_30.webm differ diff --git a/other/video/README.md b/other/video/README.md new file mode 100644 index 0000000000..ff5fa453c5 --- /dev/null +++ b/other/video/README.md @@ -0,0 +1,4 @@ +# 📽 Video WebGPT + +- Verze 1: https://youtu.be/NAPFCtVWkRQ + diff --git a/other/video/skript.md b/other/video/skript.md new file mode 100644 index 0000000000..edaf29b27c --- /dev/null +++ b/other/video/skript.md @@ -0,0 +1,38 @@ +"Představte si svět, kde můžete mít vlastní webovou stránku bez desítek hodin konzultací, bez potřeby registrace domény, nebo hledání webhostingu." + +"Svět, v němž je vaším osobním programátorem, webdesignérem a grafikem nástroj, který nespí, nejí a stojí zhruba setinu hodinové mzdy pokladní v supermarketu." + +"Zapomeňte na low code a no code nástroje typu Wix, Bubble, či WordPress. Vytvoření webové stránky od nynějška nevyžaduje žádné předchozí znalosti. WebGPT vše automatizuje od začátku až do konce." + +"Pojďme si to vyzkoušet v praxi. V této krátké ukázce uvidíte, jak během několika minut vytvořit vlastní webové stránky pouze s využitím obrázku, který dobře reprezentuje Vás, či produkt nebo službu, kterou nabízíte." + +"Předpokládejme, že už takový obrázek máte. Nahrajte obrázek. Počkejte, až WebGPT analyzuje jeho obsah a navrhne předpokládaný účel vaší webové stránky." + +"Představte si, že účelem Vašeho webu je poskytování fiančních konzultací. Do připraveného textového pole tedy napište 'Finanční konzultace' a stiskněte tlačítko "Submit"." + +"Teď stručně popište cíl Vašeho webu. Pro účely této ukázky popíšeme cíl třeba nějak takto: + +1. Poskytnout informace o službě finačního poradenství v oblasti úvěrů, investic, pojištění a finančního plánování +2. Pomůžeme vám sestavit osobní finanční plán a ukážeme vám, jak ho můžete konzistentně a dlouhodobě realizovat, abyste co nejdříve dosáhli finanční nezávislosti +3. Nacházíte se v obtížné finanční situaci a nevíte, kam dál? Kontaktujte nás a my vám pomůžeme najít optimální řešení. +4. Pomůžeme Vám s řešením Vaší pojistné události, abychom maximalizovali šance k jejímu úspěšnému vyřešení" + +"Napište, jak chcete, aby se Váš web jmenoval: v tomto případě chcete například vytvořit webové stránky společnosti FinSmart, s. r. o." + +"Ještě zadat podtitulek webu, který v tomto příapdě bude znít například: 'chytrá cesta k finanční svobodě' a jsme téměř hotovi. [Ve skutečnosti zadám text "Finanční vize s rozumem a srdcem"] Stiskneme "Submit" a sledujme, co se bude dít." + +"Vzhledem k tomu, že nástroj WebGPT využívá aplikační rozhraní velkého jazykového modelu známého pod názvem ChatGPT, jsou všechny jeho výstupy do značné míry stochastické. Prakticky to znamená, že zadáte-li desetkrát stejný vstup, dostanete pokaždé mírně odlišný výstup. Proto je potřeba, abyste jako uživatelé měli možnost skutečnou podobu webové stránky měnit." + +"K tomu je určeno několik funkcionalit. V první řadě je většina elementů umístěných na webové stránce interaktivních. Dejme tomu, že si všimnete, že podtitulek Vaší stránky není zvolen správně. Není nic jednoduššího než to změnit. [Jdu a přepíšu 'Finanční vize s rozumem a srdcem' na 'Chytrá cesta k finanční svobodě', jak bylo předtím avizováno]". + +"Pokud Vám jakákoliv část webu, kterou WebGPT vygeneruje, nevyhovuje, můžete ji jednoduše změnit. Například velmi často se může hodit to, že příkazem "Change font", který je ukryt v menu v pravém dolním rohu obrazovky, můžete změnit typ písma na celé stránce a zachovat přitom různé velikosti písma napříč stránkou." + +"Pokud ani to nestačí, lze vhodným textovým příkazem (takzvaným promptem) na stránku cokoliv přidat. Tak například si všimnete, že na stránce chybí odstavec s názvem 'Povinné informace'. V takovém případě prostě stačí do příkazové lišty v dolní části obrazovky napsat něco jako 'Přidej na konec stránky odstavec nazvaný "Povinné informace", který bude obsahovat následující text: "Společnost SmartFin, s. r. o. je vázaným zástupcem společnosti SMS finance, a. s., registrovaným u České národní banky". + +"Chvíli počkejte než se příkaz na pozadí zpracuje, a zkontrolujte, zda je vše tak, jak jste si představovali." + +"Pokud by vám ani toto nestačilo, je zde možnost přímé editace zdrojového kódu stránky, kterou najdete opět v menu v pravém dolním rohu pod názvem "Edit Markdown"." + +"Pokud jste se svou stránkou spokojeni, stačí už jen maličkost: pusťte svou stránku do světa stisknutím tlačítka "Publish". Pokud se prozatím spokojíte s tím, že vaše stránka bude součástí domény www.webgpt.cz, máte hotovo. Alternativou k tomuto postupu je, že WebGPT použijete jako levný prototypovací nástroj a zdrojový kód stránky si necháte vyexportovat a svěříte jeho dokončení webdyzajnérovi." + +"Tím je celý proces tvorby vaší webové stránky ukončen a vy můžete spokojeně čekat na první kontakty od svých budoucích zákazníků." diff --git a/other/wallpaper-samples/IMG_20231026_192619_800.jpg b/other/wallpaper-samples/IMG_20231026_192619_800.jpg new file mode 100644 index 0000000000..b6905d5e16 Binary files /dev/null and b/other/wallpaper-samples/IMG_20231026_192619_800.jpg differ diff --git a/other/wallpaper-samples/IMG_20231026_192619_855.jpg b/other/wallpaper-samples/IMG_20231026_192619_855.jpg new file mode 100644 index 0000000000..bc6244d9f6 Binary files /dev/null and b/other/wallpaper-samples/IMG_20231026_192619_855.jpg differ diff --git a/other/wallpaper-samples/IMG_20231026_192619_989.jpg b/other/wallpaper-samples/IMG_20231026_192619_989.jpg new file mode 100644 index 0000000000..7928a0bc86 Binary files /dev/null and b/other/wallpaper-samples/IMG_20231026_192619_989.jpg differ diff --git a/other/wallpaper-samples/IMG_20231026_192620_163.jpg b/other/wallpaper-samples/IMG_20231026_192620_163.jpg new file mode 100644 index 0000000000..5802426422 Binary files /dev/null and b/other/wallpaper-samples/IMG_20231026_192620_163.jpg differ diff --git a/other/wallpaper-samples/IMG_20231026_192620_511.jpg b/other/wallpaper-samples/IMG_20231026_192620_511.jpg new file mode 100644 index 0000000000..f1f170c921 Binary files /dev/null and b/other/wallpaper-samples/IMG_20231026_192620_511.jpg differ diff --git a/package-lock.json b/package-lock.json index 11d0c19871..5993ba2df7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "1-2i", + "name": "webgpt", "version": "1.8.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "1-2i", + "name": "webgpt", "version": "1.8.1", "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -15,6 +15,13 @@ "@faker-js/faker": "8.0.2", "@monaco-editor/react": "4.5.1", "@octokit/rest": "18.12.0", + "@promptbook/core": "0.17.0", + "@promptbook/execute-javascript": "0.17.0", + "@promptbook/openai": "0.17.0", + "@promptbook/remote-client": "0.17.0", + "@promptbook/remote-server": "0.17.0", + "@promptbook/types": "0.17.0", + "@promptbook/utils": "0.17.0", "@supabase/supabase-js": "2.26.0", "@types/file-saver": "2.0.5", "@vercel/og": "0.5.8", @@ -23,31 +30,37 @@ "crypto-js": "4.1.1", "destroyable": "0.12.0", "everstorage": "1.13.0", + "express": "4.18.2", "file-saver": "2.0.5", "formidable": "3.5.0", "html-react-parser": "3.0.12", + "i18next": "22.4.11", "insta-fetcher": "1.3.26", "isomorphic-fetch": "3.0.0", "jszip": "3.10.1", "lodash": "4.17.21", "markdown-to-txt": "2.0.1", - "n12": "1.6.0", + "n12": "1.8.0", "next": "13.4.12", + "next-i18next": "13.2.2", "next-remove-imports": "1.0.11", "next-router-mock": "0.9.3", "node-gzip": "1.1.2", - "openai": "4.2.0", + "openai": "4.16.1", "prettier": "2.8.1", "puppeteer": "20.8.3", "raw-loader": "4.0.2", "react": "18.2.0", "react-color": "2.19.3", "react-dom": "18.2.0", + "react-i18next": "12.2.0", "rxjs": "7.8.1", "seedrandom": "3.0.5", - "sharp": "0.31.3", + "sharp": "0.32.6", "showdown": "2.1.0", "showdown-highlight": "3.1.0", + "socket.io": "4.7.2", + "socket.io-client": "4.7.2", "spacetrim": "0.9.2", "typescript": "4.9.4", "uuid": "9.0.0", @@ -60,6 +73,7 @@ "devDependencies": { "@total-typescript/ts-reset": "0.4.2", "@types/crypto-js": "4.1.1", + "@types/express": "4.17.18", "@types/formidable": "3.4.1", "@types/isomorphic-fetch": "0.0.36", "@types/jest": "29.2.6", @@ -899,15 +913,15 @@ } }, "node_modules/@azure/core-util": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", - "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.6.1.tgz", + "integrity": "sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==", "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@azure/ms-rest-azure-js": { @@ -954,11 +968,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -1030,29 +1044,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.19.tgz", - "integrity": "sha512-Q8Yj5X4LHVYTbLCKVz0//2D2aDmHF4xzCdEttYvKOnWvErGsa6geHXD6w46x64n5tP69VfeH+IfSrdyH3MLhwA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.19", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.19", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -1066,11 +1080,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1080,11 +1089,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "dependencies": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -1117,20 +1126,20 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -1159,15 +1168,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.19.tgz", - "integrity": "sha512-m6h1cJvn+OJ+R3jOHp30faq5xKJ7VbjwDj5RGgHuRlU9hrMeKsGC+JpihkR5w1g7IfseCPPtZ0r7/hB4UKaYlA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.19" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1208,17 +1217,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz", - "integrity": "sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -1232,24 +1241,24 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -1322,9 +1331,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1393,9 +1402,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1495,9 +1504,9 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1510,10 +1519,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "dev": true, + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1535,18 +1543,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.19.tgz", - "integrity": "sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "dependencies": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1563,12 +1571,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1751,12 +1759,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1778,9 +1786,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@icons/material": { @@ -2667,18 +2675,18 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@monaco-editor/loader": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", - "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz", + "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==", "dependencies": { "state-local": "^1.0.6" }, @@ -3023,6 +3031,109 @@ "@octokit/openapi-types": "^12.11.0" } }, + "node_modules/@promptbook/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/core/-/core-0.17.0.tgz", + "integrity": "sha512-McnLW06vC8AwUfcGyfiJU4GIltXvH27Cg7C9LFABtxPLhPzgqjm8qxTb6HUFTpMBEhL1jDzKjaDz2Ye0131+mQ==", + "dependencies": { + "n12": "1.6.0", + "spacetrim": "0.9.2" + } + }, + "node_modules/@promptbook/core/node_modules/n12": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", + "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + }, + "node_modules/@promptbook/execute-javascript": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/execute-javascript/-/execute-javascript-0.17.0.tgz", + "integrity": "sha512-2F+DzDp8Pqt2j7DtdSn6aPG5ewxdGu0hbtIuMTCZne314l20DYLPY69qAcSq3nqwTWx0wJN8D0zKB2bEaLb8hQ==", + "dependencies": { + "n12": "1.6.0", + "spacetrim": "0.9.2", + "waitasecond": "1.11.1" + }, + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, + "node_modules/@promptbook/execute-javascript/node_modules/n12": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", + "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + }, + "node_modules/@promptbook/openai": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/openai/-/openai-0.17.0.tgz", + "integrity": "sha512-YzFGBKEE7bhXBxcaUcxRiIMn3OzpCzFCQjGo41N294XaxaWM7Lyl4Fjlcw6bHLryN6IImaA9hkdhA5/BE98gOg==", + "dependencies": { + "openai": "4.2.0" + }, + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, + "node_modules/@promptbook/openai/node_modules/openai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.2.0.tgz", + "integrity": "sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/@promptbook/remote-client": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-client/-/remote-client-0.17.0.tgz", + "integrity": "sha512-wqUFIvDQh/3i4l2bPv+IcnqHyPGoCX2fSyrzHiY1yM2+fhay7uk8H7y+aTT/5UGK16EapJ9w5JissqQcOWGcOw==", + "dependencies": { + "socket.io-client": "4.7.2" + }, + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, + "node_modules/@promptbook/remote-server": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-server/-/remote-server-0.17.0.tgz", + "integrity": "sha512-8r9w7dX7Fwz1ki1kcDqUxSDqMXivug+3hPTCfmmpaHHDTva0GXVcpTJZdCm75jC2QNhJpAfhwZT61fGCcN7FMg==", + "dependencies": { + "socket.io": "4.7.2", + "spacetrim": "0.9.2" + }, + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, + "node_modules/@promptbook/types": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/types/-/types-0.17.0.tgz", + "integrity": "sha512-HQrun1kdOi42j3kc0H+kxoH+QMEEVW8whUysMeOCt6RwicYTqRSMMXc5ZGFMrlbnyrmvmkr7pJXvGtnQ1+T4xA==", + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, + "node_modules/@promptbook/utils": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-FkA2RecpWESBrp51x3zXHzmZJS+FrCNb7td+bMpg4MO+AQ7oWB1i5jaZ447drjV/wMXAAg/cqUIVDh0sczb+0Q==", + "dependencies": { + "spacetrim": "0.9.2" + }, + "peerDependencies": { + "@promptbook/core": "0.17.0" + } + }, "node_modules/@puppeteer/browsers": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.5.tgz", @@ -3141,9 +3252,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, "node_modules/@shuding/opentype.js": { @@ -3186,11 +3297,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.7.tgz", - "integrity": "sha512-rITz65zk8QA3GQ1OeoJ3/Q4+8j/HqubWU8TBqk57BMYTOX+P+LNMoVHPqzLHhE6qKot5muhThNCYvOKNt7ojJA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3206,23 +3317,23 @@ } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", "dependencies": { - "@smithy/util-base64": "^2.0.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.8.tgz", - "integrity": "sha512-e7mwQteHjo9S1GK+TfzP3o7ujE2ZK30d6wkv5brKtabrZF7MBflj9CwUP2XYuOYebdWirHOtv8ZfkMrpcbJfYw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", "dependencies": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/types": "^2.3.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -3230,14 +3341,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.10.tgz", - "integrity": "sha512-may2/gYlDip2rjlU1Z5fcCEWY0Fu3tSu/HykgZrLfb2/171P6OYuz7dGNKBOCS1W57vP4W5wmUhm0WGehrixig==", - "dependencies": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", "tslib": "^2.5.0" }, "engines": { @@ -3245,23 +3356,23 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.7.tgz", - "integrity": "sha512-sW3AhXZhmmhh0f11EOotmNNa0rjrKwnMYNKfbp3B/qigdw6foKcmFGX+HF3XGN7w7fFeEFuXr97Ok24gRj92Xg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.7.tgz", - "integrity": "sha512-5ZKW1tUe+LD1F6dSHs+nC0vRNmMMWDJWCsw44FkhivhOB4MliGfC1ZNeO45AHD749jfJT/zcGGr2ruQT9VbThA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3269,11 +3380,11 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.7.tgz", - "integrity": "sha512-0n4LPHZt6/RAHVkwzms6U2xibmizkSYLS9HzlT86WF29X56v7OTCkMF+pUFNYZamN7iRq1Z8PM48mQsBoJPaSA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3281,12 +3392,12 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.7.tgz", - "integrity": "sha512-ZkBvDIBlJ9eJx/+CC2AY8LxAndGO+Z2FOPPprmNNDbK9/pZzVLHWGwlpsPYnA9Pc0gfOu7isIJM1yPXiK70O3A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3294,12 +3405,12 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.7.tgz", - "integrity": "sha512-CNYEzEPDIGbfvYYN7iajPY6sVZdtGvJzSbvqgH+EvismooFj8ahydGp8IKYPnd5ge5uwTATppJ2t8149tYkS7g==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3307,23 +3418,23 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.3.tgz", - "integrity": "sha512-kUg+Ey4mJeR/3+Ponuhb1rsmsfZRwjCLvC+WcPgeI+ittretEzuWAPN+9anD0HJEoApVjHpndzxPtlncbCUJDQ==", - "dependencies": { - "@smithy/protocol-http": "^3.0.3", - "@smithy/querystring-builder": "^2.0.7", - "@smithy/types": "^2.3.1", - "@smithy/util-base64": "^2.0.0", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3331,24 +3442,24 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.7.tgz", - "integrity": "sha512-egXnfEZRGvovv7Bedkxy31/Pj2x+4FeskHBME32zNfp2/qiAQrDVNyU/7PBGkPIvuAAZYe0Loe8fZX7jhP0u9w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", "dependencies": { "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.7.tgz", - "integrity": "sha512-aB5lvIDP1v+ZUUS8ek3XW5xnZ6jUQ86JXqG7a5jMP6AbjAc3439mIbs6+f1EQ5MtYmrQCEtRRyvv5QofvotH0w==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3356,12 +3467,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.7.tgz", - "integrity": "sha512-DgTypY0jzDAvYWPDDSngTAnutv/uYokpu82r2g9ZZt9LBw86evTrvo4jo60riU/pPr9naIzMxePiGVl56ldr5w==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", "dependencies": { - "@smithy/types": "^2.3.1", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3369,11 +3480,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.7.tgz", - "integrity": "sha512-qVOZnHFPzQo4BS47/PANHX32Y69c0tJxKBkqTL795D/DKInqBwmBO/m1gS7v0ZQqmtCuoy2l87RflQfRY2xEIw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -3389,22 +3500,22 @@ } }, "node_modules/@smithy/md5-js": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.7.tgz", - "integrity": "sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", "dependencies": { - "@smithy/types": "^2.3.1", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.9.tgz", - "integrity": "sha512-2XVFsGqswxrIBi0w4Njwzb1zsbte26U513K+WPFm9z6SB/3WR5/VBVjTaTcamrXznTAqBjTwTL0Ysisv1dW0Rw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", "dependencies": { - "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3412,11 +3523,11 @@ } }, "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3424,14 +3535,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.7.tgz", - "integrity": "sha512-4/L0wV7PzHEprJB0gazSTIwlW/2cCfwC9EHavUMhoCyl1tLer6CJwDbAMit1IMvwbHkwuKopueb8dFPHfpS2Pw==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.7", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-middleware": "^2.0.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -3439,16 +3552,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.10.tgz", - "integrity": "sha512-VwAQOR5Rh/y9BzUgb5DzUk7qYBiMZu3pEQa5EwwAf/F7lpMuNildGrAxtDmsXk90490FJwa6LyFknXP3kO5BnA==", - "dependencies": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/protocol-http": "^3.0.3", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.3.1", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -3457,11 +3570,11 @@ } }, "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3477,11 +3590,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.7.tgz", - "integrity": "sha512-tOldis4PUNafdGErLZ+33p9Pf3MmTlLa176X321Z6ZaCf1XNEow9m3T5vXrcHErVAvjPG0mp3l54J94HnPc+rQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3489,10 +3602,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", "dependencies": { + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3500,13 +3614,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.10.tgz", - "integrity": "sha512-e5MiLH5Eu+BbYsmhZIkvUKCzite6JCBPL75PNjlRK2TWvSpfp19hNf2SiJIQbPalcFj5zlyBvtcEkF1sfYIdhg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", "dependencies": { - "@smithy/property-provider": "^2.0.8", - "@smithy/shared-ini-file-loader": "^2.0.9", - "@smithy/types": "^2.3.1", + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3514,14 +3628,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.3.tgz", - "integrity": "sha512-TGkgpx68SqvbspVHaG3iwqP2mKYOT4whiq7Kv2X9v+InngL4MkpH3LQ0Dk7kbloahZr+hAOyb6s8D7T8TXRrzA==", - "dependencies": { - "@smithy/abort-controller": "^2.0.7", - "@smithy/protocol-http": "^3.0.3", - "@smithy/querystring-builder": "^2.0.7", - "@smithy/types": "^2.3.1", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3529,11 +3643,11 @@ } }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3541,11 +3655,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.8.tgz", - "integrity": "sha512-oaaP/i7bGG8XbxG9Kx4PZh83iJ2jo/vt8RmJdi9hmc8APBaW1HGDperVXDCyPQdVYXmiqrtxc/rPImyBma1G3A==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3565,11 +3679,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.7.tgz", - "integrity": "sha512-RPHnqt4iH1Kwp1Zbf4gJI88hZiynEZjE5hEWJNBmKqCe1Q6v7HBLtaovTaiuYaMEmPyb2KxOi3lISAdT6uuPqw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -3578,11 +3692,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.7.tgz", - "integrity": "sha512-Cwi/Hgs73nbLKfgH7dXAxzvDxyTrK+BLrlAd0KXU7xcBR94V132nvxoq39BMWckYAPmnMwxCwq8uusNH4Dnagw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3590,19 +3704,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "dependencies": { + "@smithy/types": "^2.5.0" + }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.9.tgz", - "integrity": "sha512-vBLgJI+Qpz1TZ0W2kUBOmG2Q+geVEhiXE99UX02+UFag2WzOQ6frvV6rpadwJu0uwF02GG620NbiKGboqZ19YA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3610,17 +3727,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.7.tgz", - "integrity": "sha512-qNCJpyhRWxT5RWmeSo/Zv+miQ60Y/D2JmPdFw7v2WpPVxVK7JDpqUbvq0QYE+dBGPX/uagAkE3NvJUcn0fTE3A==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.7", + "@smithy/eventstream-codec": "^2.0.13", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3628,13 +3745,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.4.tgz", - "integrity": "sha512-KRQvYYjEGqvmwnKSAZ8EL0hZvPxGQMYbAKS/AMGq2fuRmwAlinSVJ/fkIs65bZp2oYjcskd1ZgKcP+2UDjNPTQ==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.1", - "@smithy/util-stream": "^2.0.10", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", "tslib": "^2.5.0" }, "engines": { @@ -3642,9 +3759,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.1.tgz", - "integrity": "sha512-cS48e4Yawb6pGakj7DBJUIPFIkqnUWyXTe2ndPRNagD73b6kEJqTc8bhTyfUve0A+sijK256UKE0J1juAfCeDA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", "dependencies": { "tslib": "^2.5.0" }, @@ -3653,19 +3770,19 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.7.tgz", - "integrity": "sha512-SwMl1Lq3yFR2hzhwWYKg04uJHpfcXWMBPycm4Z8GkLI6Dw7rJNDApEbMtujlYw6pVP2WKbrpaGHjQ9MdP92kMQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", "dependencies": { - "@smithy/querystring-parser": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -3717,12 +3834,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.8.tgz", - "integrity": "sha512-8znx01mkmfKxhiSB2bOF5eMutuCLMd8m2Kh0ulRp8vgzhwRLDJoU6aHSEUoNptbuTAtiFf4u0gpkYC2XfbWwuA==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", "dependencies": { - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -3731,15 +3849,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.10.tgz", - "integrity": "sha512-QUcUckL4ZqDFVwLnh7zStRUnXtTC6hcJZ4FmMqnxlPcL33Rko0sMQwrMDnMdzF3rS3wvqugAaq3zzop1HCluvw==", - "dependencies": { - "@smithy/config-resolver": "^2.0.8", - "@smithy/credential-provider-imds": "^2.0.10", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3758,10 +3877,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", "dependencies": { + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3769,11 +3889,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", "dependencies": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -3781,17 +3902,17 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.10.tgz", - "integrity": "sha512-2EgK5cBiv9OaDmhSXmsZY8ZByBl1dg/Tbc51iBJ5GkLGVYhaA6/1l6vHHV41m4Im3D0XfZV1tmeLlQgmRnYsTQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", "dependencies": { - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/node-http-handler": "^2.1.3", - "@smithy/types": "^2.3.1", - "@smithy/util-base64": "^2.0.0", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3810,9 +3931,9 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -3822,18 +3943,23 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.7.tgz", - "integrity": "sha512-lIY4GOmrSwMiGHhm++1ea0MdKx5y4V39ue4eNg4yxmip1hiuCLxkfXGZVLh0JPxBxAzbQw+E/5TPfY4w/RBkNw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", "dependencies": { - "@smithy/abort-controller": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "node_modules/@supabase/functions-js": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.5.tgz", @@ -3843,17 +3969,17 @@ } }, "node_modules/@supabase/gotrue-js": { - "version": "2.52.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.52.0.tgz", - "integrity": "sha512-UFCbydMYFn/LhPW08aeZ9sgFDA3kOQCjA2ieFj/sccye9m8Tv0pimMfnXh3A9TqBJ0/0utpkaGSad3XdpJ+Mbw==", + "version": "2.57.0", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.57.0.tgz", + "integrity": "sha512-/CcAW40aPKgp9/w9WgXVUQFg1AOdvFR687ONOMjASPBuC6FsNbKlcXp4pc+rwKNtxyxDkBbR+x7zj/8g00r/Og==", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/node-fetch": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.14.tgz", - "integrity": "sha512-w/Tsd22e/5fAeoxqQ4P2MX6EyF+iM6rc9kmlMVFkHuG0rAltt2TLhFbDJfemnHbtvnazWaRfy5KnFU/SYT37dQ==", + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3862,18 +3988,19 @@ } }, "node_modules/@supabase/postgrest-js": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.8.4.tgz", - "integrity": "sha512-ELjpvhb04wILUiJz9zIsTSwaz9LQNlX+Ig5/LgXQ7k68qQI6NqHVn+ISRNt53DngUIyOnLHjeqqIRHBZ7zpgGA==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.8.6.tgz", + "integrity": "sha512-iiEgF6o/pBumdFe/A2HSG/xx3L6ap7OO3IpTB2hsamNiH/gWb8ru4Z8bdwZjN4sQQttxgsIgZVMsNLkTOCOQhw==", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/realtime-js": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.4.tgz", - "integrity": "sha512-FzSzs1k9ruh/uds5AJ95Nc3beiMCCIhougExJ3O98CX1LMLAKUKFy5FivKLvcNhXnNfUEL0XUfGMb4UH2J7alg==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.8.4.tgz", + "integrity": "sha512-5C9slLTGikHnYmAnIBOaPogAgbcNY68vnIyE6GpqIKjHElVb6LIi4clwNcjHSj4z6szuvvzj8T/+ePEgGEGekw==", "dependencies": { + "@supabase/node-fetch": "^2.6.14", "@types/phoenix": "^1.5.4", "@types/websocket": "^1.0.3", "websocket": "^1.0.34" @@ -3987,9 +4114,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -4000,18 +4127,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -4019,14 +4146,46 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz", @@ -4034,9 +4193,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", "peer": true, "dependencies": { "@types/estree": "*", @@ -4044,9 +4203,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "peer": true, "dependencies": { "@types/eslint": "*", @@ -4054,11 +4213,35 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "peer": true }, + "node_modules/@types/express": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/file-saver": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", @@ -4084,24 +4267,29 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" } }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "node_modules/@types/isomorphic-fetch": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz", @@ -4109,24 +4297,24 @@ "dev": true }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" @@ -4170,9 +4358,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -4186,6 +4374,12 @@ "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -4198,9 +4392,9 @@ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "node_modules/@types/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-OZsUlr2nxvkqUFLSaY2ZbA+P1q22q+KrlxWOn/38RX+u5kTkYL2mTujEpzUhGkS+K/QCYp9oagfXG39XOzyySg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -4229,15 +4423,15 @@ } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/phoenix": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.1.tgz", - "integrity": "sha512-g2/8Ogi2zfiS25jdGT5iDSo5yjruhhXaOuOJCkOxMW28w16VxFvjtAXjBNRo7WlRS4+UXAMj3mK46UwieNM/5g==" + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -4246,16 +4440,26 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/react": { "version": "18.0.26", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4282,19 +4486,18 @@ } }, "node_modules/@types/reactcss": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz", - "integrity": "sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.10.tgz", + "integrity": "sha512-gf5qJ1wOYP8N5q9H8/5c3QZHQzu8ltPClhM0vEWuBu9SGg4KSzgpJd2TShEsQDwsYn+mtnJ1xHUdJyzj/r9WrA==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.7.tgz", + "integrity": "sha512-8g25Nl3AuB1KulTlSUsUhUo/oBgBU6XIXQ+XURpeioEbEJvkO7qI4vDfREv3vJYHHzqXjcAHvoJy4pTtSQNZtA==" }, "node_modules/@types/seedrandom": { "version": "3.0.4", @@ -4302,6 +4505,27 @@ "integrity": "sha512-/rWdxeiuZenlawrHU+XV6ZHMTKOqrC2hMfeDfLTIWJhDZP5aVqXRysduYHBbhD7CeJO6FJr/D2uBVXB7GT6v7w==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, "node_modules/@types/showdown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.0.tgz", @@ -4315,15 +4539,15 @@ "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.7.tgz", + "integrity": "sha512-sU5MNKvSFdbT97qLSabU6jxceY9BfYQe9uF+b8E1rdTecpq9ROkkKoiHlblUlhgfaz9bdCByWjAI40Y3mHf1iQ==", "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/strip-bom": { @@ -4350,9 +4574,9 @@ } }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, "node_modules/@types/uuid": { @@ -4362,32 +4586,32 @@ "dev": true }, "node_modules/@types/websocket": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.6.tgz", - "integrity": "sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.9.tgz", + "integrity": "sha512-xrMBdqdKdlE+7L9Wg2PQblIkZGSgiMlEoP6UAaYKMHbbxqCJ6PV/pTZ2RcMcSSERurU2TtGbmO4lqpFOJd01ww==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "dependencies": { "@types/node": "*" @@ -4682,10 +4906,22 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { "acorn": "bin/acorn" }, @@ -4722,9 +4958,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -4938,6 +5174,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -5088,9 +5329,9 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "node_modules/astral-regex": { @@ -5103,9 +5344,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/asynciterator.prototype": { @@ -5202,9 +5443,9 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, "engines": { "node": ">=4" @@ -5445,9 +5686,9 @@ } }, "node_modules/babel-plugin-transform-remove-imports": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-imports/-/babel-plugin-transform-remove-imports-1.7.0.tgz", - "integrity": "sha512-gprmWf6ry5qrnxMyiDaxZpXzZJP6R9FRA+p0AImLIWRmSEGtlKcFprHKeGMZYkII9rJR6Q1hYou+n1fk6rWf2g==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-imports/-/babel-plugin-transform-remove-imports-1.7.1.tgz", + "integrity": "sha512-8V8G6zqLyAGUNuTHQPGF9b6WbaCqjtU2JYpnmUK9DU0uSQV4s8/sK31sxK6lg008WSBuRjzPoj2/E1eydhepew==", "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -5527,6 +5768,14 @@ } ] }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -5558,9 +5807,9 @@ } }, "node_modules/bin-links": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.2.tgz", - "integrity": "sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.3.tgz", + "integrity": "sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==", "dev": true, "dependencies": { "cmd-shim": "^6.0.0", @@ -5647,7 +5896,57 @@ "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", "dev": true }, - "node_modules/bowser": { + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" @@ -5675,9 +5974,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "funding": [ { "type": "opencollective", @@ -5693,10 +5992,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -5772,9 +6071,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -5794,6 +6093,14 @@ "node": ">=10.16.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -5813,13 +6120,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5851,9 +6158,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001534", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", - "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", + "version": "1.0.30001563", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", "funding": [ { "type": "opencollective", @@ -6015,9 +6322,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -6195,9 +6502,9 @@ } }, "node_modules/cmd-shim": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.2.tgz", + "integrity": "sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6340,17 +6647,70 @@ "resolved": "https://registry.npmjs.org/configchecker/-/configchecker-1.5.1.tgz", "integrity": "sha512-xSi+AjhesvjS4gNow3o8dYZV7JfYX6aJXErFIsTNEKO/458JAQ1zFVAyVw2R7wN+e2vCVoNWtP2kNveYSfdwHw==" }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-js": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", + "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", @@ -6497,8 +6857,7 @@ "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/cypress": { "version": "12.3.0", @@ -6558,9 +6917,9 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.60.tgz", - "integrity": "sha512-F2dfYDznasZ6XfuWvTmQcrElTHfxCdC+F23WCcuAJaIrMIhhBUSARJQdy0lUY+MPDNLqGvTo8/IuiF+QX64IHQ==", + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", "dev": true }, "node_modules/cypress/node_modules/commander": { @@ -6663,9 +7022,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", "dev": true }, "node_modules/debounce-fn": { @@ -6766,10 +7125,9 @@ } }, "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -6804,6 +7162,14 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -6818,6 +7184,15 @@ "node": ">=6" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/destroyable": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/destroyable/-/destroyable-0.12.0.tgz", @@ -7110,10 +7485,15 @@ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, "node_modules/electron-to-chromium": { - "version": "1.4.522", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.522.tgz", - "integrity": "sha512-KGKjcafTpOxda0kqwQ72M0tDmX6RsGhUJTy0Hr7slt0+CgHh9Oex8JdjY9Og68dUkTLUlBOJC0A5W5Mw3QSGCg==" + "version": "1.4.589", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz", + "integrity": "sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==" }, "node_modules/email-addresses": { "version": "3.1.0", @@ -7147,6 +7527,14 @@ "node": ">= 4" } }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -7155,6 +7543,94 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -7212,26 +7688,26 @@ } }, "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -7241,7 +7717,7 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", @@ -7255,7 +7731,7 @@ "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -7287,32 +7763,32 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "peer": true }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -7514,9 +7990,9 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -7565,26 +8041,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -7626,27 +8102,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { "node": ">=4.0" @@ -7655,15 +8131,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", @@ -7719,12 +8186,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -7903,6 +8370,14 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -7927,9 +8402,9 @@ } }, "node_modules/eventsource-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.0.0.tgz", - "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.1.tgz", + "integrity": "sha512-3Ej2iLj6ZnX+5CMxqyUb8syl9yVZwcwm8IIMrOJlF7I51zxOOrRlU3zxSb/6hFbl03ts1ZxHAGJdWLZOLyKG7w==", "dev": true, "engines": { "node": ">=14.18" @@ -8014,6 +8489,74 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -8072,9 +8615,9 @@ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -8168,15 +8711,6 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/fetch-blob/node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/fflate": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", @@ -8278,6 +8812,36 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -8312,29 +8876,29 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "funding": [ { "type": "individual", @@ -8398,6 +8962,14 @@ "node": ">= 12.20" } }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -8423,10 +8995,18 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" @@ -8436,6 +9016,14 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -8507,10 +9095,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -8556,15 +9146,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8610,9 +9199,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -8876,9 +9465,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -8941,7 +9530,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -8960,18 +9548,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -8990,12 +9566,11 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9005,7 +9580,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9017,7 +9591,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9040,6 +9613,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -9068,9 +9652,9 @@ } }, "node_modules/highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", "engines": { "node": ">=12.0.0" } @@ -9079,7 +9663,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, "dependencies": { "react-is": "^16.7.0" } @@ -9151,6 +9734,14 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, "node_modules/html-react-parser": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-3.0.12.tgz", @@ -9183,6 +9774,21 @@ "entities": "^4.3.0" } }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -9241,13 +9847,39 @@ "ms": "^2.0.0" } }, + "node_modules/i18next": { + "version": "22.4.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.11.tgz", + "integrity": "sha512-ShfTzXVMjXdF2iPiT/wbizOrssLh9Ab6VpuVROihLCAu+u25KbZiEYVgsA0W6g0SgjPa/JmGWcUEV/g6cKzEjQ==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/i18next-fs-backend": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.0.tgz", + "integrity": "sha512-N0SS2WojoVIh2x/QkajSps8RPKzXqryZsQh12VoFY4cLZgkD+62EPY2fY+ZjkNADu8xA5I5EadQQXa8TXBKN3w==" + }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -9273,9 +9905,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -9406,13 +10038,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -9424,6 +10056,14 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -9528,12 +10168,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9881,18 +10521,18 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -11058,9 +11698,9 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -11082,12 +11722,15 @@ "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/lazy-ass": { @@ -11469,6 +12112,19 @@ "is-buffer": "~1.1.6" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -11483,6 +12139,14 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -11500,7 +12164,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "bin": { "mime": "cli.js" }, @@ -11651,9 +12314,9 @@ } }, "node_modules/monaco-editor": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.43.0.tgz", - "integrity": "sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz", + "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==", "peer": true }, "node_modules/ms": { @@ -11662,14 +12325,14 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/n12": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", - "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.0.tgz", + "integrity": "sha512-ufiSuAZdWbbrzRZtrlOGb30EYzm46HntDtuU4cg1fOkX2l2gn9JYCbuBK0/udiRhhYzmD7PF9esg1sRVHUPy2A==" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -11694,6 +12357,14 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -11750,6 +12421,41 @@ } } }, + "node_modules/next-i18next": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-13.2.2.tgz", + "integrity": "sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://locize.com" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.13", + "@types/hoist-non-react-statics": "^3.3.1", + "core-js": "^3", + "hoist-non-react-statics": "^3.3.2", + "i18next-fs-backend": "^2.1.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "i18next": "^22.0.6", + "next": ">= 12.0.0", + "react": ">= 17.0.2", + "react-i18next": "^12.2.0" + } + }, "node_modules/next-remove-imports": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/next-remove-imports/-/next-remove-imports-1.0.11.tgz", @@ -11798,9 +12504,9 @@ } }, "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dependencies": { "semver": "^7.3.5" }, @@ -11809,9 +12515,9 @@ } }, "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" }, "node_modules/node-domexception": { "version": "1.0.0", @@ -11851,9 +12557,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.0.tgz", + "integrity": "sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -11945,10 +12651,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12059,6 +12764,17 @@ "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", "dev": true }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -12092,9 +12808,9 @@ } }, "node_modules/openai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.2.0.tgz", - "integrity": "sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.16.1.tgz", + "integrity": "sha512-Gr+uqUN1ICSk6VhrX64E+zL7skjI1TgPr/XUN+ZQuNLLOvx15+XZulx/lSW4wFEAQzgjBDlMBbBeikguGIjiMg==", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -12103,7 +12819,8 @@ "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" }, "bin": { "openai": "bin/cli" @@ -12308,6 +13025,14 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -12347,6 +13072,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -12751,6 +13481,18 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -12779,9 +13521,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -12853,9 +13595,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -12935,6 +13677,28 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -13066,6 +13830,27 @@ "react": "^18.2.0" } }, + "node_modules/react-i18next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.2.0.tgz", + "integrity": "sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==", + "dependencies": { + "@babel/runtime": "^7.20.6", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 19.0.0", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -13318,8 +14103,7 @@ "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regex-escape": { "version": "3.4.10", @@ -13393,9 +14177,9 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.5.tgz", - "integrity": "sha512-qWhv7PF1V95QPvRoUGHxOtnAlEvlXBylMZcjUR9pAumMmveFtcHJRXGIr+TkjfNJVQypqv2qcDiiars2y1PsSg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -13617,8 +14401,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/satori": { "version": "0.10.1", @@ -13641,14 +14424,14 @@ } }, "node_modules/satori/node_modules/emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/saxes": { "version": "6.0.0", @@ -13723,6 +14506,47 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -13732,12 +14556,40 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-function-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", @@ -13757,70 +14609,31 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, "node_modules/sharp": { - "version": "0.31.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", - "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "hasInstallScript": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", - "semver": "^7.3.8", + "semver": "^7.5.4", "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", + "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/sharp/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sharp/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/sharp/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/shebang-command": { @@ -13873,7 +14686,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -13989,6 +14801,77 @@ "npm": ">= 3.0.0" } }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -14084,9 +14967,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/sprintf-js": { @@ -14096,9 +14979,9 @@ "dev": true }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -14146,6 +15029,14 @@ "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -14155,9 +15046,9 @@ } }, "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -14375,7 +15266,7 @@ "style-to-object": "0.4.1" } }, - "node_modules/style-to-js/node_modules/style-to-object": { + "node_modules/style-to-object": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", @@ -14523,9 +15414,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", - "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -14709,10 +15600,13 @@ "dev": true }, "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/through": { "version": "2.3.8", @@ -14773,6 +15667,14 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/token-types": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", @@ -15099,6 +16001,18 @@ "typescript": ">=4.7.0" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -15223,19 +16137,27 @@ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -15246,9 +16168,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -15327,6 +16249,14 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -15342,25 +16272,19 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -15371,6 +16295,14 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -15391,6 +16323,14 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -15433,11 +16373,11 @@ } }, "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { - "node": ">= 14" + "node": ">= 8" } }, "node_modules/webidl-conversions": { @@ -15450,9 +16390,9 @@ } }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -15617,6 +16557,18 @@ "node": ">=12" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", @@ -15736,13 +16688,13 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -15800,9 +16752,9 @@ } }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -15881,6 +16833,14 @@ "node": ">=8.0.0" } }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -16810,9 +17770,9 @@ } }, "@azure/core-util": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", - "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.6.1.tgz", + "integrity": "sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==", "requires": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" @@ -16863,11 +17823,11 @@ } }, "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "requires": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "dependencies": { @@ -16923,37 +17883,32 @@ } }, "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==" }, "@babel/core": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.19.tgz", - "integrity": "sha512-Q8Yj5X4LHVYTbLCKVz0//2D2aDmHF4xzCdEttYvKOnWvErGsa6geHXD6w46x64n5tP69VfeH+IfSrdyH3MLhwA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.19", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.19", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" }, "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -16962,11 +17917,11 @@ } }, "@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "requires": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -16992,17 +17947,17 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -17022,15 +17977,15 @@ } }, "@babel/helper-module-transforms": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.19.tgz", - "integrity": "sha512-m6h1cJvn+OJ+R3jOHp30faq5xKJ7VbjwDj5RGgHuRlU9hrMeKsGC+JpihkR5w1g7IfseCPPtZ0r7/hB4UKaYlA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "requires": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.19" + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-plugin-utils": { @@ -17056,14 +18011,14 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz", - "integrity": "sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.22.15", @@ -17071,21 +18026,21 @@ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" }, "@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "requires": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" } }, "@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -17142,9 +18097,9 @@ } }, "@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -17192,9 +18147,9 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -17264,19 +18219,18 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "dev": true, + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -17292,18 +18246,18 @@ } }, "@babel/traverse": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.19.tgz", - "integrity": "sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "requires": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -17316,12 +18270,12 @@ } }, "@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -17474,12 +18428,12 @@ "integrity": "sha512-Uo3pGspElQW91PCvKSIAXoEgAUlRnH29sX2/p89kg7sP1m2PzCufHINd0FhTXQf6DYGiUlVncdSPa2F9wxed2A==" }, "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } @@ -17491,9 +18445,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "@icons/material": { @@ -18184,18 +19138,18 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@monaco-editor/loader": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", - "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz", + "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==", "requires": { "state-local": "^1.0.6" } @@ -18430,6 +19384,95 @@ "@octokit/openapi-types": "^12.11.0" } }, + "@promptbook/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/core/-/core-0.17.0.tgz", + "integrity": "sha512-McnLW06vC8AwUfcGyfiJU4GIltXvH27Cg7C9LFABtxPLhPzgqjm8qxTb6HUFTpMBEhL1jDzKjaDz2Ye0131+mQ==", + "requires": { + "n12": "1.6.0", + "spacetrim": "0.9.2" + }, + "dependencies": { + "n12": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", + "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + } + } + }, + "@promptbook/execute-javascript": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/execute-javascript/-/execute-javascript-0.17.0.tgz", + "integrity": "sha512-2F+DzDp8Pqt2j7DtdSn6aPG5ewxdGu0hbtIuMTCZne314l20DYLPY69qAcSq3nqwTWx0wJN8D0zKB2bEaLb8hQ==", + "requires": { + "n12": "1.6.0", + "spacetrim": "0.9.2", + "waitasecond": "1.11.1" + }, + "dependencies": { + "n12": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", + "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + } + } + }, + "@promptbook/openai": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/openai/-/openai-0.17.0.tgz", + "integrity": "sha512-YzFGBKEE7bhXBxcaUcxRiIMn3OzpCzFCQjGo41N294XaxaWM7Lyl4Fjlcw6bHLryN6IImaA9hkdhA5/BE98gOg==", + "requires": { + "openai": "4.2.0" + }, + "dependencies": { + "openai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.2.0.tgz", + "integrity": "sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==", + "requires": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + } + } + }, + "@promptbook/remote-client": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-client/-/remote-client-0.17.0.tgz", + "integrity": "sha512-wqUFIvDQh/3i4l2bPv+IcnqHyPGoCX2fSyrzHiY1yM2+fhay7uk8H7y+aTT/5UGK16EapJ9w5JissqQcOWGcOw==", + "requires": { + "socket.io-client": "4.7.2" + } + }, + "@promptbook/remote-server": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-server/-/remote-server-0.17.0.tgz", + "integrity": "sha512-8r9w7dX7Fwz1ki1kcDqUxSDqMXivug+3hPTCfmmpaHHDTva0GXVcpTJZdCm75jC2QNhJpAfhwZT61fGCcN7FMg==", + "requires": { + "socket.io": "4.7.2", + "spacetrim": "0.9.2" + } + }, + "@promptbook/types": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/types/-/types-0.17.0.tgz", + "integrity": "sha512-HQrun1kdOi42j3kc0H+kxoH+QMEEVW8whUysMeOCt6RwicYTqRSMMXc5ZGFMrlbnyrmvmkr7pJXvGtnQ1+T4xA==", + "requires": {} + }, + "@promptbook/utils": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-FkA2RecpWESBrp51x3zXHzmZJS+FrCNb7td+bMpg4MO+AQ7oWB1i5jaZ447drjV/wMXAAg/cqUIVDh0sczb+0Q==", + "requires": { + "spacetrim": "0.9.2" + } + }, "@puppeteer/browsers": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.5.tgz", @@ -18515,9 +19558,9 @@ "integrity": "sha512-yi6R0HyHtsoWTRA06Col4WoDs7SvlXU3DLMNP2bdAgs7HK18dTEVl1weXgxRzi8gwLteGUbIg29zulxIB3GSdg==" }, "@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, "@shuding/opentype.js": { @@ -18554,11 +19597,11 @@ } }, "@smithy/abort-controller": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.7.tgz", - "integrity": "sha512-rITz65zk8QA3GQ1OeoJ3/Q4+8j/HqubWU8TBqk57BMYTOX+P+LNMoVHPqzLHhE6qKot5muhThNCYvOKNt7ojJA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -18571,149 +19614,149 @@ } }, "@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", "requires": { - "@smithy/util-base64": "^2.0.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "@smithy/config-resolver": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.8.tgz", - "integrity": "sha512-e7mwQteHjo9S1GK+TfzP3o7ujE2ZK30d6wkv5brKtabrZF7MBflj9CwUP2XYuOYebdWirHOtv8ZfkMrpcbJfYw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", "requires": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/types": "^2.3.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" } }, "@smithy/credential-provider-imds": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.10.tgz", - "integrity": "sha512-may2/gYlDip2rjlU1Z5fcCEWY0Fu3tSu/HykgZrLfb2/171P6OYuz7dGNKBOCS1W57vP4W5wmUhm0WGehrixig==", - "requires": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "requires": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", "tslib": "^2.5.0" } }, "@smithy/eventstream-codec": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.7.tgz", - "integrity": "sha512-sW3AhXZhmmhh0f11EOotmNNa0rjrKwnMYNKfbp3B/qigdw6foKcmFGX+HF3XGN7w7fFeEFuXr97Ok24gRj92Xg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", "requires": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "@smithy/eventstream-serde-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.7.tgz", - "integrity": "sha512-5ZKW1tUe+LD1F6dSHs+nC0vRNmMMWDJWCsw44FkhivhOB4MliGfC1ZNeO45AHD749jfJT/zcGGr2ruQT9VbThA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", "requires": { - "@smithy/eventstream-serde-universal": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/eventstream-serde-config-resolver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.7.tgz", - "integrity": "sha512-0n4LPHZt6/RAHVkwzms6U2xibmizkSYLS9HzlT86WF29X56v7OTCkMF+pUFNYZamN7iRq1Z8PM48mQsBoJPaSA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/eventstream-serde-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.7.tgz", - "integrity": "sha512-ZkBvDIBlJ9eJx/+CC2AY8LxAndGO+Z2FOPPprmNNDbK9/pZzVLHWGwlpsPYnA9Pc0gfOu7isIJM1yPXiK70O3A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", "requires": { - "@smithy/eventstream-serde-universal": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/eventstream-serde-universal": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.7.tgz", - "integrity": "sha512-CNYEzEPDIGbfvYYN7iajPY6sVZdtGvJzSbvqgH+EvismooFj8ahydGp8IKYPnd5ge5uwTATppJ2t8149tYkS7g==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", "requires": { - "@smithy/eventstream-codec": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/fetch-http-handler": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.3.tgz", - "integrity": "sha512-kUg+Ey4mJeR/3+Ponuhb1rsmsfZRwjCLvC+WcPgeI+ittretEzuWAPN+9anD0HJEoApVjHpndzxPtlncbCUJDQ==", - "requires": { - "@smithy/protocol-http": "^3.0.3", - "@smithy/querystring-builder": "^2.0.7", - "@smithy/types": "^2.3.1", - "@smithy/util-base64": "^2.0.0", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "requires": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" }, "dependencies": { "@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } } } }, "@smithy/hash-blob-browser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.7.tgz", - "integrity": "sha512-egXnfEZRGvovv7Bedkxy31/Pj2x+4FeskHBME32zNfp2/qiAQrDVNyU/7PBGkPIvuAAZYe0Loe8fZX7jhP0u9w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", "requires": { "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/hash-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.7.tgz", - "integrity": "sha512-aB5lvIDP1v+ZUUS8ek3XW5xnZ6jUQ86JXqG7a5jMP6AbjAc3439mIbs6+f1EQ5MtYmrQCEtRRyvv5QofvotH0w==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/hash-stream-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.7.tgz", - "integrity": "sha512-DgTypY0jzDAvYWPDDSngTAnutv/uYokpu82r2g9ZZt9LBw86evTrvo4jo60riU/pPr9naIzMxePiGVl56ldr5w==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", "requires": { - "@smithy/types": "^2.3.1", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/invalid-dependency": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.7.tgz", - "integrity": "sha512-qVOZnHFPzQo4BS47/PANHX32Y69c0tJxKBkqTL795D/DKInqBwmBO/m1gS7v0ZQqmtCuoy2l87RflQfRY2xEIw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -18726,69 +19769,71 @@ } }, "@smithy/md5-js": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.7.tgz", - "integrity": "sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", "requires": { - "@smithy/types": "^2.3.1", - "@smithy/util-utf8": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/middleware-content-length": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.9.tgz", - "integrity": "sha512-2XVFsGqswxrIBi0w4Njwzb1zsbte26U513K+WPFm9z6SB/3WR5/VBVjTaTcamrXznTAqBjTwTL0Ysisv1dW0Rw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", "requires": { - "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "dependencies": { "@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } } } }, "@smithy/middleware-endpoint": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.7.tgz", - "integrity": "sha512-4/L0wV7PzHEprJB0gazSTIwlW/2cCfwC9EHavUMhoCyl1tLer6CJwDbAMit1IMvwbHkwuKopueb8dFPHfpS2Pw==", - "requires": { - "@smithy/middleware-serde": "^2.0.7", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-middleware": "^2.0.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "requires": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" } }, "@smithy/middleware-retry": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.10.tgz", - "integrity": "sha512-VwAQOR5Rh/y9BzUgb5DzUk7qYBiMZu3pEQa5EwwAf/F7lpMuNildGrAxtDmsXk90490FJwa6LyFknXP3kO5BnA==", - "requires": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/protocol-http": "^3.0.3", - "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.3.1", - "@smithy/util-middleware": "^2.0.0", - "@smithy/util-retry": "^2.0.0", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "requires": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", "tslib": "^2.5.0", "uuid": "^8.3.2" }, "dependencies": { "@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -18800,62 +19845,63 @@ } }, "@smithy/middleware-serde": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.7.tgz", - "integrity": "sha512-tOldis4PUNafdGErLZ+33p9Pf3MmTlLa176X321Z6ZaCf1XNEow9m3T5vXrcHErVAvjPG0mp3l54J94HnPc+rQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/middleware-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", - "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", "requires": { + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/node-config-provider": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.10.tgz", - "integrity": "sha512-e5MiLH5Eu+BbYsmhZIkvUKCzite6JCBPL75PNjlRK2TWvSpfp19hNf2SiJIQbPalcFj5zlyBvtcEkF1sfYIdhg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", "requires": { - "@smithy/property-provider": "^2.0.8", - "@smithy/shared-ini-file-loader": "^2.0.9", - "@smithy/types": "^2.3.1", + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/node-http-handler": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.3.tgz", - "integrity": "sha512-TGkgpx68SqvbspVHaG3iwqP2mKYOT4whiq7Kv2X9v+InngL4MkpH3LQ0Dk7kbloahZr+hAOyb6s8D7T8TXRrzA==", - "requires": { - "@smithy/abort-controller": "^2.0.7", - "@smithy/protocol-http": "^3.0.3", - "@smithy/querystring-builder": "^2.0.7", - "@smithy/types": "^2.3.1", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "requires": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "dependencies": { "@smithy/protocol-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.3.tgz", - "integrity": "sha512-UGfmQNdijlFV+UzgdRyfe05S5vLDdcdkvNcxhGvQ+Er7TjUkZSxjukQB9VXtT8oTHztgOMX74DDlPBsVzZR5Pg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } } } }, "@smithy/property-provider": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.8.tgz", - "integrity": "sha512-oaaP/i7bGG8XbxG9Kx4PZh83iJ2jo/vt8RmJdi9hmc8APBaW1HGDperVXDCyPQdVYXmiqrtxc/rPImyBma1G3A==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -18869,86 +19915,89 @@ } }, "@smithy/querystring-builder": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.7.tgz", - "integrity": "sha512-RPHnqt4iH1Kwp1Zbf4gJI88hZiynEZjE5hEWJNBmKqCe1Q6v7HBLtaovTaiuYaMEmPyb2KxOi3lISAdT6uuPqw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" } }, "@smithy/querystring-parser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.7.tgz", - "integrity": "sha512-Cwi/Hgs73nbLKfgH7dXAxzvDxyTrK+BLrlAd0KXU7xcBR94V132nvxoq39BMWckYAPmnMwxCwq8uusNH4Dnagw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/service-error-classification": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", - "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "requires": { + "@smithy/types": "^2.5.0" + } }, "@smithy/shared-ini-file-loader": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.9.tgz", - "integrity": "sha512-vBLgJI+Qpz1TZ0W2kUBOmG2Q+geVEhiXE99UX02+UFag2WzOQ6frvV6rpadwJu0uwF02GG620NbiKGboqZ19YA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", "requires": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/signature-v4": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.7.tgz", - "integrity": "sha512-qNCJpyhRWxT5RWmeSo/Zv+miQ60Y/D2JmPdFw7v2WpPVxVK7JDpqUbvq0QYE+dBGPX/uagAkE3NvJUcn0fTE3A==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", "requires": { - "@smithy/eventstream-codec": "^2.0.7", + "@smithy/eventstream-codec": "^2.0.13", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, "@smithy/smithy-client": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.4.tgz", - "integrity": "sha512-KRQvYYjEGqvmwnKSAZ8EL0hZvPxGQMYbAKS/AMGq2fuRmwAlinSVJ/fkIs65bZp2oYjcskd1ZgKcP+2UDjNPTQ==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", "requires": { - "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.3.1", - "@smithy/util-stream": "^2.0.10", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", "tslib": "^2.5.0" } }, "@smithy/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.1.tgz", - "integrity": "sha512-cS48e4Yawb6pGakj7DBJUIPFIkqnUWyXTe2ndPRNagD73b6kEJqTc8bhTyfUve0A+sijK256UKE0J1juAfCeDA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", "requires": { "tslib": "^2.5.0" } }, "@smithy/url-parser": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.7.tgz", - "integrity": "sha512-SwMl1Lq3yFR2hzhwWYKg04uJHpfcXWMBPycm4Z8GkLI6Dw7rJNDApEbMtujlYw6pVP2WKbrpaGHjQ9MdP92kMQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", "requires": { - "@smithy/querystring-parser": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "requires": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -18988,26 +20037,28 @@ } }, "@smithy/util-defaults-mode-browser": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.8.tgz", - "integrity": "sha512-8znx01mkmfKxhiSB2bOF5eMutuCLMd8m2Kh0ulRp8vgzhwRLDJoU6aHSEUoNptbuTAtiFf4u0gpkYC2XfbWwuA==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", "requires": { - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "@smithy/util-defaults-mode-node": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.10.tgz", - "integrity": "sha512-QUcUckL4ZqDFVwLnh7zStRUnXtTC6hcJZ4FmMqnxlPcL33Rko0sMQwrMDnMdzF3rS3wvqugAaq3zzop1HCluvw==", - "requires": { - "@smithy/config-resolver": "^2.0.8", - "@smithy/credential-provider-imds": "^2.0.10", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/property-provider": "^2.0.8", - "@smithy/types": "^2.3.1", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "requires": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, @@ -19020,34 +20071,36 @@ } }, "@smithy/util-middleware": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", - "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", "requires": { + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/util-retry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", - "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", "requires": { - "@smithy/service-error-classification": "^2.0.0", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, "@smithy/util-stream": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.10.tgz", - "integrity": "sha512-2EgK5cBiv9OaDmhSXmsZY8ZByBl1dg/Tbc51iBJ5GkLGVYhaA6/1l6vHHV41m4Im3D0XfZV1tmeLlQgmRnYsTQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", "requires": { - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/node-http-handler": "^2.1.3", - "@smithy/types": "^2.3.1", - "@smithy/util-base64": "^2.0.0", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" } }, @@ -19060,24 +20113,29 @@ } }, "@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "requires": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" } }, "@smithy/util-waiter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.7.tgz", - "integrity": "sha512-lIY4GOmrSwMiGHhm++1ea0MdKx5y4V39ue4eNg4yxmip1hiuCLxkfXGZVLh0JPxBxAzbQw+E/5TPfY4w/RBkNw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", "requires": { - "@smithy/abort-controller": "^2.0.7", - "@smithy/types": "^2.3.1", + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" } }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "@supabase/functions-js": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.5.tgz", @@ -19087,34 +20145,35 @@ } }, "@supabase/gotrue-js": { - "version": "2.52.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.52.0.tgz", - "integrity": "sha512-UFCbydMYFn/LhPW08aeZ9sgFDA3kOQCjA2ieFj/sccye9m8Tv0pimMfnXh3A9TqBJ0/0utpkaGSad3XdpJ+Mbw==", + "version": "2.57.0", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.57.0.tgz", + "integrity": "sha512-/CcAW40aPKgp9/w9WgXVUQFg1AOdvFR687ONOMjASPBuC6FsNbKlcXp4pc+rwKNtxyxDkBbR+x7zj/8g00r/Og==", "requires": { "@supabase/node-fetch": "^2.6.14" } }, "@supabase/node-fetch": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.14.tgz", - "integrity": "sha512-w/Tsd22e/5fAeoxqQ4P2MX6EyF+iM6rc9kmlMVFkHuG0rAltt2TLhFbDJfemnHbtvnazWaRfy5KnFU/SYT37dQ==", + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", "requires": { "whatwg-url": "^5.0.0" } }, "@supabase/postgrest-js": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.8.4.tgz", - "integrity": "sha512-ELjpvhb04wILUiJz9zIsTSwaz9LQNlX+Ig5/LgXQ7k68qQI6NqHVn+ISRNt53DngUIyOnLHjeqqIRHBZ7zpgGA==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.8.6.tgz", + "integrity": "sha512-iiEgF6o/pBumdFe/A2HSG/xx3L6ap7OO3IpTB2hsamNiH/gWb8ru4Z8bdwZjN4sQQttxgsIgZVMsNLkTOCOQhw==", "requires": { "@supabase/node-fetch": "^2.6.14" } }, "@supabase/realtime-js": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.4.tgz", - "integrity": "sha512-FzSzs1k9ruh/uds5AJ95Nc3beiMCCIhougExJ3O98CX1LMLAKUKFy5FivKLvcNhXnNfUEL0XUfGMb4UH2J7alg==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.8.4.tgz", + "integrity": "sha512-5C9slLTGikHnYmAnIBOaPogAgbcNY68vnIyE6GpqIKjHElVb6LIi4clwNcjHSj4z6szuvvzj8T/+ePEgGEGekw==", "requires": { + "@supabase/node-fetch": "^2.6.14", "@types/phoenix": "^1.5.4", "@types/websocket": "^1.0.3", "websocket": "^1.0.34" @@ -19224,9 +20283,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -19237,18 +20296,18 @@ } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -19256,14 +20315,46 @@ } }, "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", "dev": true, "requires": { "@babel/types": "^7.20.7" } }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "requires": { + "@types/node": "*" + } + }, "@types/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz", @@ -19271,9 +20362,9 @@ "dev": true }, "@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", "peer": true, "requires": { "@types/estree": "*", @@ -19281,9 +20372,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "peer": true, "requires": { "@types/eslint": "*", @@ -19291,11 +20382,35 @@ } }, "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "peer": true }, + "@types/express": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "@types/file-saver": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", @@ -19321,24 +20436,29 @@ } }, "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" } }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "@types/isomorphic-fetch": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz", @@ -19346,24 +20466,24 @@ "dev": true }, "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" @@ -19406,9 +20526,9 @@ } }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/json5": { "version": "0.0.29", @@ -19422,6 +20542,12 @@ "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, "@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -19434,9 +20560,9 @@ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "@types/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-OZsUlr2nxvkqUFLSaY2ZbA+P1q22q+KrlxWOn/38RX+u5kTkYL2mTujEpzUhGkS+K/QCYp9oagfXG39XOzyySg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", "requires": { "@types/node": "*", "form-data": "^4.0.0" @@ -19464,15 +20590,15 @@ } }, "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "@types/phoenix": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.1.tgz", - "integrity": "sha512-g2/8Ogi2zfiS25jdGT5iDSo5yjruhhXaOuOJCkOxMW28w16VxFvjtAXjBNRo7WlRS4+UXAMj3mK46UwieNM/5g==" + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" }, "@types/prettier": { "version": "2.7.2", @@ -19481,16 +20607,26 @@ "dev": true }, "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "@types/react": { "version": "18.0.26", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -19517,19 +20653,18 @@ } }, "@types/reactcss": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz", - "integrity": "sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.10.tgz", + "integrity": "sha512-gf5qJ1wOYP8N5q9H8/5c3QZHQzu8ltPClhM0vEWuBu9SGg4KSzgpJd2TShEsQDwsYn+mtnJ1xHUdJyzj/r9WrA==", "dev": true, "requires": { "@types/react": "*" } }, "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.7.tgz", + "integrity": "sha512-8g25Nl3AuB1KulTlSUsUhUo/oBgBU6XIXQ+XURpeioEbEJvkO7qI4vDfREv3vJYHHzqXjcAHvoJy4pTtSQNZtA==" }, "@types/seedrandom": { "version": "3.0.4", @@ -19537,6 +20672,27 @@ "integrity": "sha512-/rWdxeiuZenlawrHU+XV6ZHMTKOqrC2hMfeDfLTIWJhDZP5aVqXRysduYHBbhD7CeJO6FJr/D2uBVXB7GT6v7w==", "dev": true }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, "@types/showdown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.0.tgz", @@ -19550,15 +20706,15 @@ "dev": true }, "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.7.tgz", + "integrity": "sha512-sU5MNKvSFdbT97qLSabU6jxceY9BfYQe9uF+b8E1rdTecpq9ROkkKoiHlblUlhgfaz9bdCByWjAI40Y3mHf1iQ==", "dev": true }, "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "@types/strip-bom": { @@ -19585,9 +20741,9 @@ } }, "@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, "@types/uuid": { @@ -19597,32 +20753,32 @@ "dev": true }, "@types/websocket": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.6.tgz", - "integrity": "sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.9.tgz", + "integrity": "sha512-xrMBdqdKdlE+7L9Wg2PQblIkZGSgiMlEoP6UAaYKMHbbxqCJ6PV/pTZ2RcMcSSERurU2TtGbmO4lqpFOJd01ww==", "requires": { "@types/node": "*" } }, "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "requires": { "@types/node": "*" @@ -19863,10 +21019,19 @@ "event-target-shim": "^5.0.0" } }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" }, "acorn-globals": { "version": "7.0.1", @@ -19893,9 +21058,9 @@ "requires": {} }, "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "dev": true }, "agent-base": { @@ -20040,6 +21205,11 @@ "is-array-buffer": "^3.0.1" } }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -20151,9 +21321,9 @@ "dev": true }, "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "astral-regex": { @@ -20163,9 +21333,9 @@ "dev": true }, "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "asynciterator.prototype": { @@ -20231,9 +21401,9 @@ "dev": true }, "axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true }, "axios": { @@ -20404,9 +21574,9 @@ } }, "babel-plugin-transform-remove-imports": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-imports/-/babel-plugin-transform-remove-imports-1.7.0.tgz", - "integrity": "sha512-gprmWf6ry5qrnxMyiDaxZpXzZJP6R9FRA+p0AImLIWRmSEGtlKcFprHKeGMZYkII9rJR6Q1hYou+n1fk6rWf2g==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-imports/-/babel-plugin-transform-remove-imports-1.7.1.tgz", + "integrity": "sha512-8V8G6zqLyAGUNuTHQPGF9b6WbaCqjtU2JYpnmUK9DU0uSQV4s8/sK31sxK6lg008WSBuRjzPoj2/E1eydhepew==", "requires": {} }, "babel-preset-current-node-syntax": { @@ -20460,6 +21630,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -20485,9 +21660,9 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "bin-links": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.2.tgz", - "integrity": "sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.3.tgz", + "integrity": "sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==", "dev": true, "requires": { "cmd-shim": "^6.0.0", @@ -20560,6 +21735,48 @@ "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", "dev": true }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, "bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -20585,14 +21802,14 @@ } }, "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" } }, "bs-logger": { @@ -20639,9 +21856,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "requires": { "node-gyp-build": "^4.3.0" } @@ -20654,6 +21871,11 @@ "streamsearch": "^1.1.0" } }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, "cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -20667,13 +21889,13 @@ "dev": true }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" } }, "callsites": { @@ -20693,9 +21915,9 @@ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" }, "caniuse-lite": { - "version": "1.0.30001534", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", - "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==" + "version": "1.0.30001563", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==" }, "caseless": { "version": "0.12.0", @@ -20796,9 +22018,9 @@ } }, "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "cjs-module-lexer": { @@ -20934,9 +22156,9 @@ } }, "cmd-shim": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.2.tgz", + "integrity": "sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw==", "dev": true }, "co": { @@ -21051,17 +22273,53 @@ "resolved": "https://registry.npmjs.org/configchecker/-/configchecker-1.5.1.tgz", "integrity": "sha512-xSi+AjhesvjS4gNow3o8dYZV7JfYX6aJXErFIsTNEKO/458JAQ1zFVAyVw2R7wN+e2vCVoNWtP2kNveYSfdwHw==" }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-js": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", + "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==" }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", @@ -21175,8 +22433,7 @@ "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "cypress": { "version": "12.3.0", @@ -21229,9 +22486,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.60.tgz", - "integrity": "sha512-F2dfYDznasZ6XfuWvTmQcrElTHfxCdC+F23WCcuAJaIrMIhhBUSARJQdy0lUY+MPDNLqGvTo8/IuiF+QX64IHQ==", + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", "dev": true }, "commander": { @@ -21314,9 +22571,9 @@ } }, "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", "dev": true }, "debounce-fn": { @@ -21381,10 +22638,9 @@ "dev": true }, "define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "requires": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -21407,6 +22663,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -21418,6 +22679,11 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, "destroyable": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/destroyable/-/destroyable-0.12.0.tgz", @@ -21640,10 +22906,15 @@ } } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, "electron-to-chromium": { - "version": "1.4.522", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.522.tgz", - "integrity": "sha512-KGKjcafTpOxda0kqwQ72M0tDmX6RsGhUJTy0Hr7slt0+CgHh9Oex8JdjY9Og68dUkTLUlBOJC0A5W5Mw3QSGCg==" + "version": "1.4.589", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz", + "integrity": "sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==" }, "email-addresses": { "version": "3.1.0", @@ -21668,6 +22939,11 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -21676,6 +22952,61 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" + }, "enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -21715,26 +23046,26 @@ } }, "es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -21744,7 +23075,7 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", @@ -21758,7 +23089,7 @@ "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.13" } }, "es-iterator-helpers": { @@ -21784,29 +23115,29 @@ } }, "es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "peer": true }, "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" } }, "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { @@ -21993,9 +23324,9 @@ } }, "eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "requires": { "debug": "^4.3.4", @@ -22028,26 +23359,26 @@ } }, "eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -22079,35 +23410,27 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" } }, "eslint-plugin-react": { @@ -22144,12 +23467,12 @@ } }, "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -22247,6 +23570,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -22265,9 +23593,9 @@ "peer": true }, "eventsource-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.0.0.tgz", - "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.1.tgz", + "integrity": "sha512-3Ej2iLj6ZnX+5CMxqyUb8syl9yVZwcwm8IIMrOJlF7I51zxOOrRlU3zxSb/6hFbl03ts1ZxHAGJdWLZOLyKG7w==", "dev": true }, "everstorage": { @@ -22331,6 +23659,67 @@ "jest-util": "^29.7.0" } }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, "ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -22380,9 +23769,9 @@ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -22445,14 +23834,6 @@ "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" - }, - "dependencies": { - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true - } } }, "fflate": { @@ -22528,6 +23909,35 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -22550,26 +23960,26 @@ } }, "flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" }, "for-each": { "version": "0.3.3", @@ -22608,6 +24018,13 @@ "requires": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" + }, + "dependencies": { + "web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" + } } }, "formdata-polyfill": { @@ -22629,12 +24046,22 @@ "once": "^1.4.0" } }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, "fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -22692,10 +24119,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.6", @@ -22726,15 +24152,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -22762,9 +24187,9 @@ } }, "get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" @@ -22976,9 +24401,9 @@ } }, "globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -23019,7 +24444,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.3" } @@ -23035,15 +24459,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -23056,25 +24471,22 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -23085,6 +24497,14 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -23101,15 +24521,14 @@ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" }, "highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==" + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==" }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, "requires": { "react-is": "^16.7.0" } @@ -23174,6 +24593,14 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "requires": { + "void-elements": "3.1.0" + } + }, "html-react-parser": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-3.0.12.tgz", @@ -23196,6 +24623,18 @@ "entities": "^4.3.0" } }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -23242,13 +24681,25 @@ "ms": "^2.0.0" } }, + "i18next": { + "version": "22.4.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.11.tgz", + "integrity": "sha512-ShfTzXVMjXdF2iPiT/wbizOrssLh9Ab6VpuVROihLCAu+u25KbZiEYVgsA0W6g0SgjPa/JmGWcUEV/g6cKzEjQ==", + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "i18next-fs-backend": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.0.tgz", + "integrity": "sha512-N0SS2WojoVIh2x/QkajSps8RPKzXqryZsQh12VoFY4cLZgkD+62EPY2fY+ZjkNADu8xA5I5EadQQXa8TXBKN3w==" + }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -23257,9 +24708,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true }, "image-q": { @@ -23364,13 +24815,13 @@ } }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -23379,6 +24830,11 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -23453,12 +24909,12 @@ } }, "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -23695,15 +25151,15 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true }, "istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -24620,9 +26076,9 @@ } }, "keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "requires": { "json-buffer": "3.0.1" @@ -24641,12 +26097,12 @@ "dev": true }, "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "requires": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" } }, "lazy-ass": { @@ -24956,6 +26412,16 @@ "is-buffer": "~1.1.6" } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -24967,6 +26433,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -24980,8 +26451,7 @@ "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.52.0", @@ -25086,9 +26556,9 @@ "dev": true }, "monaco-editor": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.43.0.tgz", - "integrity": "sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz", + "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==", "peer": true }, "ms": { @@ -25097,14 +26567,14 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "n12": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.6.0.tgz", - "integrity": "sha512-1yc++1RbULLNqyxxqOKfrJEdjWGAG4tyQgJKi9QRjYPmyiAOqpsnphJuDOGdZWtsLg3DH2roAYjz7S74CP6nYw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.0.tgz", + "integrity": "sha512-ufiSuAZdWbbrzRZtrlOGb30EYzm46HntDtuU4cg1fOkX2l2gn9JYCbuBK0/udiRhhYzmD7PF9esg1sRVHUPy2A==" }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "napi-build-utils": { "version": "1.0.2", @@ -25117,6 +26587,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -25159,6 +26634,18 @@ } } }, + "next-i18next": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-13.2.2.tgz", + "integrity": "sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==", + "requires": { + "@babel/runtime": "^7.20.13", + "@types/hoist-non-react-statics": "^3.3.1", + "core-js": "^3", + "hoist-non-react-statics": "^3.3.2", + "i18next-fs-backend": "^2.1.1" + } + }, "next-remove-imports": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/next-remove-imports/-/next-remove-imports-1.0.11.tgz", @@ -25181,17 +26668,17 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "requires": { "semver": "^7.3.5" } }, "node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" }, "node-domexception": { "version": "1.0.0", @@ -25207,9 +26694,9 @@ } }, "node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.0.tgz", + "integrity": "sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==" }, "node-gzip": { "version": "1.1.2", @@ -25278,10 +26765,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "object-keys": { "version": "1.1.1", @@ -25362,6 +26848,14 @@ "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", "dev": true }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -25388,9 +26882,9 @@ } }, "openai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.2.0.tgz", - "integrity": "sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.16.1.tgz", + "integrity": "sha512-Gr+uqUN1ICSk6VhrX64E+zL7skjI1TgPr/XUN+ZQuNLLOvx15+XZulx/lSW4wFEAQzgjBDlMBbBeikguGIjiMg==", "requires": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -25399,7 +26893,8 @@ "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" } }, "optionator": { @@ -25555,6 +27050,11 @@ "entities": "^4.4.0" } }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -25585,6 +27085,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -25877,6 +27382,15 @@ "react-is": "^16.13.1" } }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -25905,9 +27419,9 @@ } }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "puppeteer": { "version": "20.8.3", @@ -25949,9 +27463,9 @@ } }, "pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true }, "qs": { @@ -25995,6 +27509,22 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -26092,6 +27622,15 @@ "scheduler": "^0.23.0" } }, + "react-i18next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.2.0.tgz", + "integrity": "sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==", + "requires": { + "@babel/runtime": "^7.20.6", + "html-parse-stringify": "^3.0.1" + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -26273,8 +27812,7 @@ "regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "regex-escape": { "version": "3.4.10", @@ -26330,9 +27868,9 @@ "dev": true }, "resolve": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.5.tgz", - "integrity": "sha512-qWhv7PF1V95QPvRoUGHxOtnAlEvlXBylMZcjUR9pAumMmveFtcHJRXGIr+TkjfNJVQypqv2qcDiiars2y1PsSg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { "is-core-module": "^2.13.0", @@ -26483,8 +28021,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "satori": { "version": "0.10.1", @@ -26504,16 +28041,16 @@ }, "dependencies": { "emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" } } }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "saxes": { "version": "6.0.0", @@ -26571,6 +28108,48 @@ } } }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -26580,12 +28159,34 @@ "randombytes": "^2.1.0" } }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "set-function-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", @@ -26602,59 +28203,24 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, "sharp": { - "version": "0.31.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", - "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "requires": { "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", - "semver": "^7.3.8", + "semver": "^7.5.4", "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", + "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } } }, "shebang-command": { @@ -26694,7 +28260,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -26771,6 +28336,56 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, + "socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "requires": { + "ws": "~8.11.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + } + }, + "socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, "socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -26852,9 +28467,9 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "sprintf-js": { @@ -26864,9 +28479,9 @@ "dev": true }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -26902,15 +28517,20 @@ "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, "streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", "requires": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -27083,16 +28703,14 @@ "integrity": "sha512-zKI5gN/zb7LS/Vm0eUwjmjrXWw8IMtyA8aPBJZdYiQTXj4+wQ3IucOLIOnF7zCHxvW8UhIGh/uZh/t9zEHXNTQ==", "requires": { "style-to-object": "0.4.1" - }, - "dependencies": { - "style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "requires": { - "inline-style-parser": "0.1.1" - } - } + } + }, + "style-to-object": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", + "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", + "requires": { + "inline-style-parser": "0.1.1" } }, "styled-jsx": { @@ -27196,9 +28814,9 @@ } }, "terser": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", - "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "peer": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -27330,9 +28948,9 @@ "dev": true }, "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", "dev": true }, "through": { @@ -27385,6 +29003,11 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, "token-types": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", @@ -27613,6 +29236,15 @@ "dev": true, "requires": {} }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -27711,16 +29343,21 @@ } }, "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, "untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -27728,9 +29365,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -27782,6 +29419,11 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, "uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -27794,22 +29436,14 @@ "dev": true }, "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } + "convert-source-map": "^2.0.0" } }, "validate-npm-package-license": { @@ -27822,6 +29456,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -27841,6 +29480,11 @@ } } }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + }, "w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -27877,9 +29521,9 @@ } }, "web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, "webidl-conversions": { "version": "7.0.0", @@ -27888,9 +29532,9 @@ "dev": true }, "webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -28014,6 +29658,17 @@ "dev": true, "requires": { "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "whatwg-fetch": { @@ -28118,13 +29773,13 @@ "dev": true }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -28164,9 +29819,9 @@ } }, "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "requires": {} }, @@ -28219,6 +29874,11 @@ "resolved": "https://registry.npmjs.org/xmldom-qsa/-/xmldom-qsa-1.1.3.tgz", "integrity": "sha512-IJBOczBpAYrIBJFFsmCBwfBhwe4zdMR3Xz0ZBX0OFtgO49rLy/BWbhkegOwsthdBWb1gUtFK6ZZnGdT8ZqPRBA==" }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 9cb04bf6db..e66bc7e1ac 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,44 @@ { - "name": "1-2i", + "name": "webgpt", "version": "1.8.1", "private": false, "license": "SEE LICENSE IN LICENSE", - "description": "We are the ...", + "description": "An AI-powered tool for web design https://webgpt.cz/", "homepage": "https://webgpt.cz/", "repository": { "type": "git", - "url": "https://github.com/hejny/1-2i" + "url": "https://github.com/hejny/webgpt" }, + "contributors": [ + "Pavol Hejný (https://www.pavolhejny.com/)" + ], + "keywords": [ + "AI", + "Web Design", + "Generative AI", + "ChatGPT", + "Dall-E", + "MidJourney", + "Stable Diffusion", + "Web Generation", + "Responsive Design", + "AI Design", + "Web Development", + "HTML", + "CSS", + "JavaScript", + "autogpt", + "openai", + "gpt-3", + "gpt-4", + "chatgpt", + "machine-learning", + "web-generation", + "text-generation", + "language-model" + ], "scripts": { - "dev": "cross-env NODE_OPTIONS='--inspect' next dev -p 4444", + "dev": "npx chokidar \"locales/**/*.yml\" -c \"npx kill-port 4444 && NODE_OPTIONS='--inspect' next dev -p 4444\" --initial --debounce 500", "build": "next build", "start": "next start", "lint": "next lint", @@ -26,15 +54,22 @@ "prettier": "prettier --config .prettierrc --ignore-unknown --write \"{pages,public,styles}/**/*\"", "prettier-commit": "git diff --exit-code && npm run prettier && git add . && git commit --allow-empty -m \"🧹 Prettier\"", "preversion": "git pull && npm run prettier-commit && npm run test-types && npm run lint && npm test && npm run test-build", - "postversion": "git push && git push --tags && echo \"Check the deploy process: https://github.com/hejny/aiai/actions/\"" + "postversion": "git push && git push --tags && echo \"Check the deploy process: https://github.com/hejny/webgpt/actions/\"" }, "dependencies": { - "@octokit/rest": "18.12.0", "@aws-sdk/client-s3": "3.378.0", "@azure/cognitiveservices-computervision": "8.2.0", "@azure/ms-rest-azure-js": "2.1.0", "@faker-js/faker": "8.0.2", + "@promptbook/core": "0.17.0", + "@promptbook/execute-javascript": "0.17.0", + "@promptbook/openai": "0.17.0", + "@promptbook/remote-client": "0.17.0", + "@promptbook/remote-server": "0.17.0", + "@promptbook/types": "0.17.0", + "@promptbook/utils": "0.17.0", "@monaco-editor/react": "4.5.1", + "@octokit/rest": "18.12.0", "@supabase/supabase-js": "2.26.0", "@types/file-saver": "2.0.5", "@vercel/og": "0.5.8", @@ -43,29 +78,33 @@ "crypto-js": "4.1.1", "destroyable": "0.12.0", "everstorage": "1.13.0", + "express": "4.18.2", "file-saver": "2.0.5", "formidable": "3.5.0", "html-react-parser": "3.0.12", + "i18next": "22.4.11", "insta-fetcher": "1.3.26", "isomorphic-fetch": "3.0.0", "jszip": "3.10.1", "lodash": "4.17.21", "markdown-to-txt": "2.0.1", - "n12": "1.6.0", + "n12": "1.8.0", "next": "13.4.12", + "next-i18next": "13.2.2", "next-remove-imports": "1.0.11", "next-router-mock": "0.9.3", "node-gzip": "1.1.2", - "openai": "4.2.0", + "openai": "4.16.1", "prettier": "2.8.1", "puppeteer": "20.8.3", "raw-loader": "4.0.2", "react": "18.2.0", "react-color": "2.19.3", "react-dom": "18.2.0", + "react-i18next": "12.2.0", "rxjs": "7.8.1", "seedrandom": "3.0.5", - "sharp": "0.31.3", + "sharp": "0.32.6", "showdown": "2.1.0", "showdown-highlight": "3.1.0", "spacetrim": "0.9.2", @@ -75,11 +114,14 @@ "whoiser": "1.17.1", "xmldom-qsa": "1.1.3", "xyzt": "5.4.0", - "yaml": "2.2.2" + "yaml": "2.2.2", + "socket.io": "4.7.2", + "socket.io-client": "4.7.2" }, "devDependencies": { "@total-typescript/ts-reset": "0.4.2", "@types/crypto-js": "4.1.1", + "@types/express": "4.17.18", "@types/formidable": "3.4.1", "@types/isomorphic-fetch": "0.0.36", "@types/jest": "29.2.6", diff --git a/promptbook-server/server.bash b/promptbook-server/server.bash new file mode 100644 index 0000000000..735549445c --- /dev/null +++ b/promptbook-server/server.bash @@ -0,0 +1,3 @@ +#!/bin/bash + +npx ts-node ./promptbook-server/server.ts \ No newline at end of file diff --git a/promptbook-server/server.ts b/promptbook-server/server.ts new file mode 100644 index 0000000000..b0d7b63401 --- /dev/null +++ b/promptbook-server/server.ts @@ -0,0 +1,35 @@ +import * as dotenv from 'dotenv'; + +dotenv.config({ path: '.env' }); + +import { PromptTemplatePipelineLibrary } from '@promptbook/core'; +import { OpenAiExecutionTools } from '@promptbook/openai'; +import { runRemoteServer } from '@promptbook/remote-server'; +import { IS_DEVELOPMENT, OPENAI_API_KEY } from '../config'; +import { SupabaseLoggerWrapperOfNaturalExecutionTools } from '../src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionTools'; +// [🎛] import { webgptPtpLibrary } from '../src/ai/prompt-templates/webgptPtpLibrary'; + +runRemoteServer({ + isVerbose: false /* <- Note: [3] We want server to be silent and OpenAiExecutionTools to be verbose */, + port: 4445 /* <- TODO: Unhardcode (all ports) */, + path: '/promptbook/socket.io', + ptbkLibrary: PromptTemplatePipelineLibrary.fromSources({ + /* <- TODO: [🎛] Use here real webgptPtpLibrary */ + }), + + createNaturalExecutionTools(clientId) { + return new SupabaseLoggerWrapperOfNaturalExecutionTools({ + isVerbose: false /* <- Note: [3] */, + clientId, + naturalExecutionTools: new OpenAiExecutionTools({ + isVerbose: IS_DEVELOPMENT /* <- Note: [3] */, + openAiApiKey: OPENAI_API_KEY!, + user: clientId, + }), + }); + }, +}); + +/** + * TODO: [🃏] Pass here some security token to prevent DDoS + */ diff --git a/promptbook-server/tsconfig.json b/promptbook-server/tsconfig.json new file mode 100644 index 0000000000..e25e758d17 --- /dev/null +++ b/promptbook-server/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "downlevelIteration": true, + "allowJs": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noUnusedLocals": false, + "resolveJsonModule": true, + "esModuleInterop": true + }, + "exclude": ["node_modules"] +} diff --git a/promptbook/TODO.txt b/promptbook/TODO.txt new file mode 100644 index 0000000000..1bf182f259 --- /dev/null +++ b/promptbook/TODO.txt @@ -0,0 +1,3 @@ +TODO: Implement PTP Imports +TODO: [🧠] Maybe better to use: translate(en->cs)=>assignment=>translate(cs->en)=>write-website-content.ptbk.md=>translate(en->cs) +TODO: [🧠] Wording: Assignment, Description, Prompt, biography \ No newline at end of file diff --git a/promptbook/other/enhance-text-cs.ptbk.md b/promptbook/other/enhance-text-cs.ptbk.md new file mode 100644 index 0000000000..83b65a44a3 --- /dev/null +++ b/promptbook/other/enhance-text-cs.ptbk.md @@ -0,0 +1,39 @@ +# 📝 Vylepšení textu + +Instrukce pro vylepšení textu za pomocí [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/cs/other/enhance-text-cs.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Input param `{inputText}` Vstupní text +- Output param `{outputText}` Vylepšený text + +## Úprava postu + +- use completion +- postprocess spaceTrim + +``` +Jsi zkušený copywriter s vytříbeným jazykem a smyslem pro detail vám bylo svěřeno zpracování následujícího textu. +Tento text má být součástí připravované marketingové kampaně. + +Pokyny pro tento úkol jsou následující: + +- Text mohl být automaticky přepsán z mluveného projevu, což může mít za následek nesprávnou nebo chybějící interpunkci a úseky, + které mohou být buď nesprávně interpretovány, nebo neúmyslně opakovány. +- Rozšiř bohatost jazyka a slovní zásobu použitou v textu. +- Oprav gramatické chyby. +- Zachovej vyznění textu. +- Zachovej délku textu +- Zachovej strukturu +- Zachovej vykání / tykání + +## Surový text příspěvku + +{inputText} + + +## Vylepšený text příspěvku + +``` + +`-> {outputText}` diff --git a/promptbook/other/promptcook-sample.ptbk.md b/promptbook/other/promptcook-sample.ptbk.md new file mode 100644 index 0000000000..f7b3f38fb7 --- /dev/null +++ b/promptbook/other/promptcook-sample.ptbk.md @@ -0,0 +1,15 @@ +# 📝 Sample promptbook + +- Input param `{inputText}` +- Output param `{outputText}` + +## Sample + +- Simple template + +```text +{inputText} +{inputText} +``` + +`-> {outputText}` diff --git a/promptbook/other/tldr-text-cs.ptbk.md b/promptbook/other/tldr-text-cs.ptbk.md new file mode 100644 index 0000000000..145b1dcf3b --- /dev/null +++ b/promptbook/other/tldr-text-cs.ptbk.md @@ -0,0 +1,36 @@ +# 📝 Zkrácení textu + +- Input param `{inputText}` +- Output param `{outputText}` + +## Shorten the text + +- Use completion +- Postprocessing `spaceTrim` + +```markdown +## Dlouhá verze + +{inputText} + +## Krátká verze +``` + +`-> {shortText}` + +## Join short and long version + +- Simple template + +```text + +{shortText} + +/TL;DR/ + +{inputText} + + +``` + +`-> {outputText}` diff --git a/promptbook/promptbook.test.ts b/promptbook/promptbook.test.ts new file mode 100644 index 0000000000..cc904b6c7b --- /dev/null +++ b/promptbook/promptbook.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from '@jest/globals'; +import { PromptTemplatePipeline, promptTemplatePipelineStringToJson } from '@promptbook/core'; +import { readdirSync, readFileSync } from 'fs'; +import { join } from 'path'; + +function checkPtbkSource(source: unknown) { + return () => { + const ptbkJson = promptTemplatePipelineStringToJson(source as any /* <- TODO: Remove any */); + PromptTemplatePipeline.fromJson(ptbkJson); + }; +} + +describe(`promptbook of WebGPT`, () => { + const ptbkSources = readdirSync(__dirname, { withFileTypes: true }) + // <- Note: In production it is not good practice to use synchronous functions + // But this is only a test before the build, so it is okay + .filter(({ name }) => name.endsWith('.ptbk.md')) + .map(({ name }) => ({ name, content: readFileSync(join(__dirname, name), 'utf-8') })); + + for (const { name, content } of ptbkSources) { + it(`should parse a valid ${name}`, () => { + expect(checkPtbkSource(content)).not.toThrow(); + }); + } + + it(`fail to parse an invalid mocked source`, () => { + expect(checkPtbkSource(`Invalid source`)).toThrowError(); + }); +}); diff --git a/promptbook/update-website-content-cs.ptbk.md b/promptbook/update-website-content-cs.ptbk.md new file mode 100644 index 0000000000..41ca94b9db --- /dev/null +++ b/promptbook/update-website-content-cs.ptbk.md @@ -0,0 +1,65 @@ +# 🌍 Aktualizace obsahu webu + +Instrukce pro úpravu obsahu webové stránky za pomocí [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/en/update-website-content.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Use chat + +- Input param `{oldContent}` Původní obsah webu +- Input param `{rawAssignment}` Požadavek od uživatele na změnu +- Output param `{newContent}` Nový obsah webu + + + +## 🖋 Úpravy + +- Use completion +- Postprocessing `spaceTrim` + +```markdown +Jste zkušený copywriter a upravujete obsah stránky podle pokynů uživatele. + +## Úkol + +{rawAssignment} + +## Původní obsah + +{oldContent} + +## Nový obsah dle zadání +``` + +`-> {newContent}` diff --git a/promptbook/update-website-content.ptbk.md b/promptbook/update-website-content.ptbk.md new file mode 100644 index 0000000000..3e93c6587b --- /dev/null +++ b/promptbook/update-website-content.ptbk.md @@ -0,0 +1,65 @@ +# 🌍 Update website content + +Instructions for updating web page content using [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/en/update-website-content.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Use chat + +- Input param `{oldContent}` Original content of the web +- Input param `{rawAssignment}` Request from the user what to change +- Output param `{newContent}` New content of the web + +## 🖋 Enhance the assignment + +- Use completion +- Postprocessing `spaceTrim` + +``` +Act as an experienced webdesigner and manager, you have a raw assignment from the user what to change on the web. +Make a proffesional assignment from it. + +## Rules +- Do NOT make it long +- Do NOT greeting or signature +- Do NOT add polite words like "please" or "thank" +- Preserve the language of the original assignment + +## Original assignment: +{rawAssignment} + +## Proffesional but short assignment: +``` + +`-> {proffesionalAssignment}` Proffesional looking request for change + +## 👤 Specifying the assignment + +- Prompt dialog + +It this the change you want to make? + +``` +{proffesionalAssignment} +``` + +`-> {finalAssignment}` Final request for change + +## 🖋 Apply assignment + +- Use completion +- Postprocessing `spaceTrim` + +``` +Act as an experienced copywriter and modify the markdown content of the page according to the user prompt. + +## Assignment: +{finalAssignment} + +## Original content: +{oldContent} + +## Content changed according to the assignment: +``` + +`-> {newContent}` diff --git a/promptbook/write-website-content-cs.ptbk.md b/promptbook/write-website-content-cs.ptbk.md new file mode 100644 index 0000000000..a2859a8f0c --- /dev/null +++ b/promptbook/write-website-content-cs.ptbk.md @@ -0,0 +1,345 @@ +# 🌍 Vytvoření obsahu webové stránky + +Instrukce pro vytvoření obsahu webové stránky za pomocí [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/cs/write-website-content.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Use chat + +- Input param `{idea}` Obecná idea webu _v Češtině_ +- Input param `{rawTitle}` Automatický návrh názvu webu _v Angličtině_ nebo prázdný text +- Input param `{rawAssignment}` popis obrázku _v Angličtině_ +- Output param `{content}` Obsah webu _v Češtině_ +- Output param `{wallpaperPrompt}` Prompt pro obrázkový model _v Angličtině_ + +## 🖋 Překlad popisu + +- Use completion +- Postprocessing `trim` + + +```text + +English assignment: +> {rawAssignment} + +České zadání: +> +``` + +`-> {rawAssignmentCs}` popis obrázku v češtině + +## 🖋 Účel stránek + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +Navrhni účel webových stránek + +## Pravidla + +- Piš jediný návrh, neříkej více možností +- Navrhni obecnou kategorii, např. "Autoservis" ne "Autoservis Pod Ohradou" +- Návrh je v češtině +- Návrh je stručný, maximálně 3 slova + +## Příklady + +- "Kavárna" +- "Autoservis" +- "Dětská herna" +- "Svatba" +- "Osobní stránka fotografa" + +## Podklady + +- Idea: {idea} +- Zadání: {rawAssignmentCs} + +## Účel webu + +> +``` + +`-> {draftedPurpose}`Návrh účelu webu + +## 👤 Upřesnění účelu uživatelem + +Je toto účelem vašeho webu? + +- Prompt dialog + +```text +{draftedPurpose} +``` + +`-> {purpose}` Účel webu + +## 🖋 Návrh zadání + +- Use completion +- Postprocessing `trim` + +```markdown +Vytvoř zadání reálného webu pro {purpose} z čistého popisu co se nachází na obrázku + +## Pravidla + +- Účelem webu je {purpose} +- Zadání je strukturované +- Zadání obsahuje konkrétní čísla, odrážky a je přesné +- Stručně, maximálně 4 body zadání, každý bod je maximálně 2 věty + +## Podklady + +- {idea} +- {rawAssignmentCs} + +## Zadání webu v Češtině +``` + +`-> {draftedAssignment}` Zadání webu v Češtině + +## 👤 Upřesnění zadání uživatelem + +Popište cíl vašeho webu + +- Prompt dialog + +```text +{draftedAssignment} +``` + +`-> {assignment}` Zadání webu + +## 🖋 Návrh obrázku + +- Use completion +- Postprocessing `trim` + + + +```markdown +## Ilustrační obrázky + +## Kavárna + +### Zadání webu + +Vytvoř web kavárny v Praze, která se jmenuje "Vesmírná Kavárna" a celá se točí kolem tématiky vesmíru. + +### Úvodní obrázek + +Velký hrnek plný kávy s mléčnou pěnou, na které je vyobrazená galaxie. Hrnek je na stole, na kterém je kniha o vesmíru a kávové zrno. + +## {purpose} + +### Zadání webu + +{assignment} + +### Úvodní obrázek +``` + +`-> {wallpaperPromptCs}` + +## 🖋 Prompt k obrázku + +- Use completion +- Postprocessing `trim` + + +```text + +Popis obrázku v Češtině: +> {wallpaperPromptCs} + + +Image description in English: +> +``` + +`-> {wallpaperPrompt}` + +## 🖋 Vylepšení názvu + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +Jako zkušenému marketingovému specialistovi vám bylo svěřeno vylepšení názvu klientova podnikání. + +## Navrhovaný název od zákazníka + +"{rawTitle}" + +## Zadání od zákazníka + +\`\`\` +{assignment} +\`\`\` + +## Pokyny + +- Účelem webu je {purpose} +- Napište pouze jeden návrh názvu +- Napište pouze název, ne zdůvodnění ani jiný text okolo +- Název je v češtině +- Název bude použit na webu, vizitkách, vizuálu, atd. +- Název má být krátký, maximálně 3 slova + +## Vylepšený název +``` + +`-> {draftedTitle}` Vylepšený název + +## 👤 Schválení názvu uživatelem + +Je název Vašeho webu v pořádku? + +- Prompt dialog +- Postprocessing `spaceTrim` + +```text +{draftedTitle} +``` + +`-> {title}` Název webu + +## 🖋 Claim pro web + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +Jako zkušenému copywriterovi vám bylo svěřeno vytvoření claimu pro webovou stránku "{title}". + +## Zadání webu od zákazníka + +\`\`\` +{assignment} +\`\`\` + +## Pokyny: + +- Účelem webu je {purpose} +- Napište pouze JEDEN návrh názvu +- Claim bude použit na webu, vizitkách, vizuálu, atd. +- Claim má být rázný, vtipný, originální + +## Příklad 1 + +> Chcete mít web nebo řešit web?! + +## Příklad 2 + +> Káva jako čistá radost + +## Jeden návrh claimu webu + +> +``` + +`-> {draftedClaim}` Návrh claimu webu + +## 👤 Schválení claimu uživatelem + +Je podtitulek Vašeho webu v pořádku? + +- Prompt dialog + +```text +{draftedClaim} +``` + +`-> {claim}` Claimu webu + +## 🖋 Analýza klíčových slov + + + +- Use completion + +```markdown +Jako zkušenému SEO specialistovi vám bylo svěřeno vytvoření klíčových slov pro webovou stránku "{title}". + +Zadání webu od zákazníka: + +\`\`\` +{assignment} +\`\`\` + +## Pokyny + +- Napište seznam klíčových slov +- Klíčové slova jsou v základním tvaru +- Účelem webu je {purpose} + +## Klíčová slova +``` + +`-> {keywords}` Klíčová slova + +## 🔗 Vytvoření začátku obsahu webu + +- Simple template +- Postprocessing `spaceTrim` + +```text + +# {title} + +> {claim} + +``` + +`-> {contentBeginning}` Začátek obsahu webu + +## 🖋 Vytvoření obsahu webu + +- Use completion + + +```markdown +Jako zkušenému copywriterovi a webdesignérovi vám bylo svěřeno vytvoření textu pro novou webovou stránku {title}. + +Zadání webu od zákazníka: + +\`\`\` +{assignment} +\`\`\` + +## Pokyny: + +- Formátování textu je v Markdownu +- Buďte struční a výstižní +- Účelem webu je {purpose} +- Použijte klíčová slova, avšak ta mají být přirozeně v textu +- Jedná se o kompletní obsah stránky, tedy nezapomeňte na všechny důležité informace a prvky, co by měla stránka obsahovat +- Použijte nadpisy, odrážky, formátování textu + +## Klíčová slova: + +{keywords} + +## Obsah webu: + +{contentBeginning} +``` + +`-> {contentBody}` Stať obsahu webu + +## 🔗 Spojení obsahu + +- Simple template + +```markdown +{contentBeginning} + +{contentBody} +``` + +`-> {content}` diff --git a/promptbook/write-website-content.ptbk.md b/promptbook/write-website-content.ptbk.md new file mode 100644 index 0000000000..998be7cc94 --- /dev/null +++ b/promptbook/write-website-content.ptbk.md @@ -0,0 +1,309 @@ +# 🌍 Creating website content + +Instructions for creating web page content using [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/cs/write-website-content.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Use chat + +- Input param `{idea}` General web idea +- Input param `{rawTitle}` `Automatic suggestion of the site title or empty text +- Input param `{rawAssignment}` image description +- Output param `{content}` `Content of the site +- Output param `{wallpaperPrompt}` Prompt for image model + +## 🖋 Page purpose + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +Design the purpose of the website + +## Rules + +- Write a single proposal, don't say multiple options +- Suggest a general category, e.g. "Car Service" not "Car Service Under Ohradou" +- Keep the proposal short, no more than 3 words + +## Examples + +- "Café" +- "Autoservis" +- "Children's playroom" +- "Wedding" +- "Photographer's personal page" + +## Background + +- {idea} +- {rawAssignment} + +## Purpose of the site + +> +``` + +`-> {draftedPurpose}` Drafting the purpose of the site + +## 👤 Specification of the purpose by the user + +Is this the purpose of your site? + +- Prompt dialog + +```text +{draftedPurpose} +``` + +`-> {purpose}` Site purpose + +## 🖋 Draft assignment + +- Use completion +- Postprocessing `trim` + +```markdown +Create a real site assignment for {purpose} from a clean description of what is in the image + +## Rules + +- The purpose of the site is {purpose} +- The assignment is structured +- The assignment contains specific numbers, bullets and is precise +- Brief, maximum 4 points of the assignment, each point is a maximum of 2 sentences + +## Handout + +- {idea} +- {rawAssignment} + +## Web assignment +``` + +`-> {draftedAssignment}` Web assignment + +## 👤 Specification of the assignment by the user + +Describe the goal of your site + +- Prompt dialog + +```text +{draftedAssignment} +``` + +`-> {assignment}` Site Assignment + +## 🖋 Image design + +- Use completion +- Postprocessing `trim` + + + +```markdown +## Illustrative images + +## Café + +### Website assignment + +Create a website for a cafe in Prague called "Space Cafe", which is all about space. + +### Image prompt + +A large mug full of coffee with milk foam, on which a galaxy is depicted. The mug is on a table with a book about space and coffee beans on it. + +## {purpose} + +### Website assignment + +{assignment} + +### Image prompt +``` + +`-> {wallpaperPrompt}` + +## 🖋 Name enhancement + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +As an experienced marketer, you have been entrusted with improving the name of a client's business. + +## Suggested name from the client + +"{rawTitle}" + +## Client's submission + +\`\`\` +{assignment} +\`\`\` + +## Instructions + +- The purpose of the website is {purpose} +- Write only one name suggestion +- Write only the title, no justification or other text around it +- The name will be used on the website, business cards, visuals, etc. + +## Improved title +``` + +`-> {draftedTitle}` Improved title + +## 👤 User approval of the title + +Is the title of your site okay? + +- Prompt dialog +- Postprocessing `spaceTrim` + +```text +{draftedTitle} +``` + +`-> {title}` Site name + +## 🖋 Claim for site + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +As an experienced copywriter, you have been entrusted with creating a claim for the "{title}" web page. + +## Client's web assignment + +\`\`\` +{assignment} +\`\`\` + +## Instructions: + +- The purpose of the site is {purpose} +- Write only ONE name suggestion +- Claim will be used on website, business cards, visuals, etc. +- Claim should be punchy, funny, original + +## Example 1 + +> Do you want to have a website or deal with a website! + +## Example 2 + +> Coffee as pure joy + +## One proposal for a web claim + +> +``` + +`-> {draftedClaim}` Web design + +## 👤 User approval of the claim + +Is the subtitle of your site okay? + +- Prompt dialog + +```text +{draftedClaim} +``` + +`-> {claim}` Claim of the site + +## 🖋 Keyword Analysis + + + +- Use completion + +```markdown +As an experienced SEO specialist, you have been entrusted with creating keywords for the "{title}" web page. + +Website assignment from the customer: + +\`\`\` +{assignment} +\`\`\` + +## Instructions + +- Write a list of keywords +- The keywords are in basic form +- The purpose of the site is {purpose} + +## Keywords +``` + +`-> {keywords}` Keywords + +## 🔗 Creating the beginning of the web content + +- Simple template + +```text + + +# {title} + + +> {claim} + + +``` + +`-> {contentBeginning}` Start of web content + +## 🖋 Creating web content + +- Use completion + + +```markdown +As an experienced copywriter and web designer, you have been entrusted with creating the text for a new web page {title}. + +A website assignment from a customer: + +\`\`\` +{assignment} +\`\`\` + +## Instructions: + +- Text formatting is in Markdown +- Be concise and to the point +- The purpose of the site is {purpose} +- Use keywords, but they should be naturally in the text +- This is the complete content of the page, so don't forget all the important information and elements the page should contain +- Use headings, bullets, text formatting + +## Keywords: + +{keywords} + +## Web Content: + +{contentBeginning} +``` + +`-> {contentBody}` Web Content Stack + +## 🔗 Content Linking + +- Simple template + +```markdown +{contentBeginning} + +{contentBody} +``` + +`-> {content}` diff --git a/promptimage-server/server.bash b/promptimage-server/server.bash new file mode 100644 index 0000000000..410f5da706 --- /dev/null +++ b/promptimage-server/server.bash @@ -0,0 +1,3 @@ +#!/bin/bash + +npx ts-node ./promptimage-server/server.ts \ No newline at end of file diff --git a/promptimage-server/server.ts b/promptimage-server/server.ts new file mode 100644 index 0000000000..fbf903591e --- /dev/null +++ b/promptimage-server/server.ts @@ -0,0 +1,29 @@ +import * as dotenv from 'dotenv'; + +dotenv.config({ path: '.env' }); + +import { IS_DEVELOPMENT, OPENAI_API_KEY } from '../config'; +import { DalleImageGenerator } from '../src/ai/text-to-image/dalle/DalleImageGenerator'; +import { SupabaseLoggerWrapperOfImageGenerator } from '../src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGenerator'; +import { runRemoteImageGeneratorServer } from '../src/ai/text-to-image/remote/runRemoteImageGeneratorServer'; + +runRemoteImageGeneratorServer({ + isVerbose: false /* <- Note: [3] We want server to be silent and OpenAiExecutionTools to be verbose */, + port: 4446 /* <- TODO: Unhardcode (all ports) */, + path: '/promptimage/socket.io', + createImageGenerator(clientId) { + return new SupabaseLoggerWrapperOfImageGenerator({ + isVerbose: false /* <- Note: [3] */, + clientId, + imageGenerator: new DalleImageGenerator({ + isVerbose: IS_DEVELOPMENT /* <- Note: [3] */, + openAiApiKey: OPENAI_API_KEY!, + user: clientId, + }), + }); + }, +}); + +/** + * TODO: [🃏] Pass here some security token to prevent DDoS + */ diff --git a/promptimage-server/tsconfig.json b/promptimage-server/tsconfig.json new file mode 100644 index 0000000000..e25e758d17 --- /dev/null +++ b/promptimage-server/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "downlevelIteration": true, + "allowJs": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noUnusedLocals": false, + "resolveJsonModule": true, + "esModuleInterop": true + }, + "exclude": ["node_modules"] +} diff --git a/public/google7ddccb81acc971e9.html b/public/google7ddccb81acc971e9.html new file mode 100644 index 0000000000..51d5ab1d51 --- /dev/null +++ b/public/google7ddccb81acc971e9.html @@ -0,0 +1 @@ +google-site-verification: google7ddccb81acc971e9.html \ No newline at end of file diff --git a/public/locale-flags/README.md b/public/locale-flags/README.md new file mode 100644 index 0000000000..d878bd73ac --- /dev/null +++ b/public/locale-flags/README.md @@ -0,0 +1,9 @@ +# 🎏 World flags + +Every place with the list of languages is marked as [🌐] + +Implementing ISO 3166-1-alpha-2 for switching language on welcome page + +https://flagicons.lipis.dev/ +https://github.com/lipis/flag-icons +https://github.com/lipis/flag-icons/tree/main/flags/4x3 diff --git a/public/locale-flags/cs.svg b/public/locale-flags/cs.svg new file mode 100644 index 0000000000..8edfeb0a8f --- /dev/null +++ b/public/locale-flags/cs.svg @@ -0,0 +1,60 @@ + + + + + + + + diff --git a/public/locale-flags/en.svg b/public/locale-flags/en.svg new file mode 100644 index 0000000000..9957235f92 --- /dev/null +++ b/public/locale-flags/en.svg @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/public/logo/webgpt.white.png b/public/logo/webgpt.white.png new file mode 100644 index 0000000000..6c972640a6 Binary files /dev/null and b/public/logo/webgpt.white.png differ diff --git a/public/logo/webgpt.white.svg b/public/logo/webgpt.white.svg index 0faae0d577..a2d3a23fac 100644 --- a/public/logo/webgpt.white.svg +++ b/public/logo/webgpt.white.svg @@ -1,12 +1,12 @@ + inkscape:current-layer="svg22" /> + + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" + id="path10" + sodipodi:nodetypes="ccscccssscsccscscssccccscccccsccccscccssccccsccscccccscsccscscscccccscssccscscc" /> + aria-label="G" + id="text1030-3" + style="font-weight:300;font-stretch:condensed;font-size:78.405px;font-family:'Barlow Condensed';-inkscape-font-specification:'Barlow Condensed, Light Condensed';font-variant-numeric:proportional-nums;fill:#ffffff;stroke-width:6.534;stroke-linecap:round;paint-order:stroke fill markers" + transform="translate(-20.847382,53.724253)"> + d="m 141.41122,3.9721857 q -5.72357,0 -9.25179,-3.44981999 -3.44982,-3.52822491 -3.44982,-9.25178981 V -39.464184 q 0,-5.723565 3.44982,-9.173385 3.52822,-3.528224 9.25179,-3.528224 5.72356,0 9.25179,3.528224 3.52822,3.44982 3.52822,9.173385 v 3.44982 q 0,0.78405 -0.78405,0.78405 h -2.58736 q -0.78405,0 -0.78405,-0.78405 v -3.528225 q 0,-4.07706 -2.35215,-6.507615 -2.35215,-2.430555 -6.2724,-2.430555 -3.92025,0 -6.2724,2.430555 -2.35215,2.430555 -2.35215,6.507615 v 30.8915699 q 0,4.0770599 2.35215,6.5076149 2.35215,2.43055492 6.2724,2.43055492 3.92025,0 6.2724,-2.43055492 2.35215,-2.430555 2.35215,-6.5076149 V -19.706124 q 0,-0.31362 -0.31362,-0.31362 h -7.37007 q -0.78405,0 -0.78405,-0.78405 v -2.116935 q 0,-0.78405 0.78405,-0.78405 h 11.0551 q 0.78405,0 0.78405,0.78405 v 14.1913049 q 0,5.7235649 -3.52822,9.25178981 -3.52823,3.44981999 -9.25179,3.44981999 z" + id="path5719" /> + + + d="m 206.30246,-50.911314 q 0.78405,0 0.78405,0.78405 v 2.116935 q 0,0.78405 -0.78405,0.78405 h -10.42787 q -0.31362,0 -0.31362,0.31362 V 3.1881349 q 0,0.78405 -0.78405,0.78405 h -2.58736 q -0.78405,0 -0.78405,-0.78405 V -46.912659 q 0,-0.31362 -0.31362,-0.31362 h -9.80063 q -0.78405,0 -0.78405,-0.78405 v -2.116935 q 0,-0.78405 0.78405,-0.78405 z" + id="path5725" /> + + + d="m 170.27604,-51.068124 q 5.48835,0 8.85976,4.155465 3.37142,4.07706 3.37142,10.741485 0,6.664424 -3.37142,10.663079 -3.29301,3.998655 -8.70295,3.998655 h -8.70296 q -0.31362,0 -0.31362,0.31362 V 3.1881349 q 0,0.78405 -0.78405,0.78405 h -2.58736 q -0.78405,0 -0.78405,-0.78405 V -50.284074 q 0,-0.78405 0.78405,-0.78405 z m -0.47043,26.108864 q 3.84184,0 6.19399,-3.057795 2.35215,-3.057795 2.35215,-8.075714 0,-5.096325 -2.35215,-8.15412 -2.35215,-3.057795 -6.19399,-3.057795 h -8.07572 q -0.31362,0 -0.31362,0.31362 v 21.718184 q 0,0.31362 0.31362,0.31362 z" + id="path5722" /> + diff --git a/public/patterns/simple/stripes-black.full.png b/public/patterns/simple/stripes-black.full.png new file mode 100644 index 0000000000..a893bea8e2 Binary files /dev/null and b/public/patterns/simple/stripes-black.full.png differ diff --git a/public/people/jiri-jahn.transparent.png b/public/people/jiri-jahn.transparent.png new file mode 100644 index 0000000000..0858f71d86 Binary files /dev/null and b/public/people/jiri-jahn.transparent.png differ diff --git a/public/visual-testing/common.js b/public/visual-testing/common.js index 6628592615..f2f14d4300 100644 --- a/public/visual-testing/common.js +++ b/public/visual-testing/common.js @@ -9,7 +9,7 @@ window.document.querySelectorAll('iframe').forEach((iframeElement) => { body{ overflow: auto !important; } - nextjs-portal, .aiai-controls { + nextjs-portal, .webgpt-controls { display: none; pointer-events: none; } diff --git a/scripts/generate-wallpapers-content/generate-wallpapers-content.ts b/scripts/generate-wallpapers-content/generate-wallpapers-content.ts index 296a3d1330..abe36c35cd 100644 --- a/scripts/generate-wallpapers-content/generate-wallpapers-content.ts +++ b/scripts/generate-wallpapers-content/generate-wallpapers-content.ts @@ -142,7 +142,7 @@ async function generateWallpapersContent({ isCommited, parallel }: { isCommited: /**/ /**/ - const font = randomItem(...FONTS); + const font = randomItem(...FONTS.filter(({ isSpecial }) => !isSpecial)).fontFamily; /**/ await writeFile( @@ -222,32 +222,6 @@ function createContentPromptTemplate() { ); } -/** - * - * @deprecated [👸] use exported version in src/ai/text-to-text/prompt-templates/createFontPromptTemplate.ts - */ -function createFontPromptTemplate() { - return spaceTrim( - (block) => - ` - Write me a Google font which is best fitting for the website. - - Pick from the list: - ${block( - [...FONTS] - .sort(() => Math.random() - 0.5) - .map((fontName) => `- ${fontName}`) - .join('\n'), - )} - - - Write just the font name nothing else. - - - `, - ); -} - /** * TODO: [👸] Use here writeWallpaperContent and DRY * TODO: [🔎] Write tags/keywords for each website to search through @see https://ibb.co/2Fy7kN4 diff --git a/scripts/generate-wallpapers-content/remove-wallpapers-content.ts b/scripts/generate-wallpapers-content/remove-wallpapers-content.ts index 96b25dec91..d98810bce6 100644 --- a/scripts/generate-wallpapers-content/remove-wallpapers-content.ts +++ b/scripts/generate-wallpapers-content/remove-wallpapers-content.ts @@ -8,6 +8,7 @@ import commander from 'commander'; import { readFile, rm } from 'fs/promises'; import { join } from 'path'; import { FONTS } from '../../config'; +import { validateMaxdown } from '../../src/components/Content/Maxdown/validateMaxdown'; import { extractTitleFromContent } from '../../src/utils/content/extractTitleFromContent'; import { removeContentComments } from '../../src/utils/content/removeContentComments'; import { commit } from '../utils/autocommit/commit'; @@ -55,7 +56,7 @@ async function removeWallpapersContent({ isCommited, parallel }: { isCommited: b content.match(//)?.groups ?.font; /* <- TODO: There can be more fonts in document */ content = removeContentComments(content); - const title = extractTitleFromContent(content); + const title = extractTitleFromContent((content)); // TODO: [💵] DRY this checks if (title === null) { @@ -86,7 +87,7 @@ async function removeWallpapersContent({ isCommited, parallel }: { isCommited: b return; } - if (!font || !FONTS.includes(font)) { + if (!font || !FONTS.map(({ fontFamily }) => fontFamily).includes(font)) { await rm(contentFilePath); console.info(chalk.red(`🗑 Removing file because it font is not in the allowed font list "${title}"`)); return; diff --git a/scripts/generate-wallpapers-content/repair-wallpapers-content.ts b/scripts/generate-wallpapers-content/repair-wallpapers-content.ts index f9f6b48644..2dfb65cec6 100644 --- a/scripts/generate-wallpapers-content/repair-wallpapers-content.ts +++ b/scripts/generate-wallpapers-content/repair-wallpapers-content.ts @@ -15,6 +15,7 @@ import { commit } from '../utils/autocommit/commit'; import { isWorkingTreeClean } from '../utils/autocommit/isWorkingTreeClean'; import { forEachHardcodedWallpaper } from '../utils/hardcoded-wallpaper/forEachHardcodedWallpaper'; import { getHardcodedWallpapersDir } from '../utils/hardcoded-wallpaper/getHardcodedWallpapersDir'; +import { validateMaxdown } from '../../src/components/Content/Maxdown/validateMaxdown'; if (process.cwd() !== join(__dirname, '../..')) { console.error(chalk.red(`CWD must be root of the project`)); @@ -103,18 +104,18 @@ async function repairWallpapersContent({ let content = await readFile(contentFilePath, 'utf-8'); const originalContent = content; - let title = extractTitleFromContent(content); + let title = extractTitleFromContent(validateMaxdown(content)); if (isRepairingFonts) { let font = content.match(//)?.groups ?.font; /* <- TODO: There can be more fonts in document */ - if (font && !FONTS.includes(font)) { - const existingFont = FONTS.find((existingFont) => font!.includes(existingFont)); + if (font && !FONTS.map(({ fontFamily }) => fontFamily).includes(font)) { + const existingFont = FONTS.find((existingFont) => font!.includes(existingFont.fontFamily)); if (existingFont) { - content = content.replace(font, existingFont); - font = existingFont; + content = content.replace(font, existingFont.fontFamily); + font = existingFont.fontFamily; } } diff --git a/scripts/playground/playground.ts b/scripts/playground/playground.ts index 86e76fee1b..ecc221ae74 100644 --- a/scripts/playground/playground.ts +++ b/scripts/playground/playground.ts @@ -1,13 +1,13 @@ #!/usr/bin/env ts-node import * as dotenv from 'dotenv'; + dotenv.config({ path: '.env' }); import chalk from 'chalk'; +import OpenAI from 'openai'; import { join } from 'path'; -// import { ChatThread } from '../../src/ai/text-to-text/ChatThread'; -import spaceTrim from 'spacetrim'; -import { getOpenaiForServer } from '../../src/ai/text-to-text/getOpenaiForServer'; +import { OPENAI_API_KEY } from '../../config'; if (process.cwd() !== join(__dirname, '../..')) { console.error(chalk.red(`CWD must be root of the project`)); @@ -28,22 +28,25 @@ async function playground() { console.info(`🧸 Playground`); // Do here stuff you want to test + //========================================> - const completion = await getOpenaiForServer().completions.create({ - model: 'text-davinci-003', - max_tokens: 1000, - prompt: spaceTrim(` - - Following is markdown content of a webpage: - - # Urban Oasis - - > Embracing Nature Amidst the Cityscape - + const openai = new OpenAI({ + apiKey: OPENAI_API_KEY, + }); - `), + const generatedImage = await openai.images.generate({ + prompt: 'A dog', + model: 'dall-e-2', + n: 0, + size: '256x256', + // size: '1792x1024', + // quality: 'standard', + // style: 'natural', + user: 'playground', }); - // console.log({ completion }, completion.choices); + + console.log(generatedImage); + //========================================/ console.info(`[ Done 🧸 Playground ]`); } diff --git a/scripts/playground/tsconfig.json b/scripts/playground/tsconfig.json index 9ecba4d498..e25e758d17 100644 --- a/scripts/playground/tsconfig.json +++ b/scripts/playground/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "esnext", "module": "commonjs", "downlevelIteration": true, "allowJs": true, diff --git a/scripts/utils/autocommit/TODO b/scripts/utils/autocommit/TODO.txt similarity index 100% rename from scripts/utils/autocommit/TODO rename to scripts/utils/autocommit/TODO.txt diff --git a/scripts/utils/execCommand/IExecCommandOptions.ts b/scripts/utils/execCommand/IExecCommandOptions.ts index 8d909e86f0..5ba93dda2d 100644 --- a/scripts/utils/execCommand/IExecCommandOptions.ts +++ b/scripts/utils/execCommand/IExecCommandOptions.ts @@ -7,10 +7,10 @@ export type IExecCommandOptions = // TODO: | RequiredAndOptional; export interface IExecCommandOptionsAdvanced { - command: string; - args: string[]; - // TODO: commands: {command: string, args?: string[]}[]; - cwd: string; - crashOnError: boolean; - timeout: number; + readonly command: string; + readonly args: string[]; + // TODO: readonly commands: {command: string, args?: string[]}[]; + readonly cwd: string; + readonly crashOnError: boolean; + readonly timeout: number; } diff --git a/scripts/utils/execCommand/TODO b/scripts/utils/execCommand/TODO.txt similarity index 100% rename from scripts/utils/execCommand/TODO rename to scripts/utils/execCommand/TODO.txt diff --git a/scripts/utils/execCommand/execCommand.test.ts b/scripts/utils/execCommand/execCommand.test.ts index 2db07b00ac..1d1f91d9c5 100644 --- a/scripts/utils/execCommand/execCommand.test.ts +++ b/scripts/utils/execCommand/execCommand.test.ts @@ -14,5 +14,5 @@ describe('basic usage of execCommand', () => { execCommand({ command: `unknown-command`, }), - ).rejects.toThrowError(`Command "unknown-command" failed`)); + ).rejects.toThrowError(/Command \"unknown-command\" failed/i)); }); diff --git a/scripts/utils/generateImport.test.ts b/scripts/utils/generateImport.test.ts index 1a41b5a0c2..8292a70b79 100644 --- a/scripts/utils/generateImport.test.ts +++ b/scripts/utils/generateImport.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from '@jest/globals'; import { generateImport } from './generateImport'; describe('generating import statements', () => { - it('will import entity from same folder', () => { + it('should import entity from same folder', () => { expect( generateImport({ entityName: 'foo', @@ -13,7 +13,7 @@ describe('generating import statements', () => { ).toBe(`import foo from './foo';`); }); - it('will import entity from parent folder', () => { + it('should import entity from parent folder', () => { expect( generateImport({ entityName: 'foo', @@ -24,7 +24,7 @@ describe('generating import statements', () => { ).toBe(`import foo from '../foo';`); }); - it('will import entity from subfolder', () => { + it('should import entity from subfolder', () => { expect( generateImport({ entityName: 'foo', @@ -35,7 +35,7 @@ describe('generating import statements', () => { ).toBe(`import foo from './utils/foo';`); }); - it('will import entity different location', () => { + it('should import entity different location', () => { expect( generateImport({ entityName: 'foo', diff --git a/scripts/utils/generateImport.ts b/scripts/utils/generateImport.ts index a0479be231..6ad9d29fe9 100644 --- a/scripts/utils/generateImport.ts +++ b/scripts/utils/generateImport.ts @@ -1,11 +1,11 @@ import { dirname, relative } from 'path'; interface ImportOptions { - entityName: string; - entityPath: string; - itselfPath: string; - isNamedImport: boolean; - isDebug?: boolean; + readonly entityName: string; + readonly entityPath: string; + readonly itselfPath: string; + readonly isNamedImport: boolean; + readonly isDebug?: boolean; } export function generateImport(options: ImportOptions): string { diff --git a/scripts/utils/hardcoded-wallpaper/IHardcodedWallpaperFiles.ts b/scripts/utils/hardcoded-wallpaper/IHardcodedWallpaperFiles.ts index c95a44854d..b1bc2af2b7 100644 --- a/scripts/utils/hardcoded-wallpaper/IHardcodedWallpaperFiles.ts +++ b/scripts/utils/hardcoded-wallpaper/IHardcodedWallpaperFiles.ts @@ -2,7 +2,7 @@ * Represents a set of hardcoded wallpaper file paths */ export interface IHardcodedWallpaperFiles { - metadataFilePath: string; - colorStatsFilePath: string; - contentFilePath: string; + readonly metadataFilePath: string; + readonly colorStatsFilePath: string; + readonly contentFilePath: string; } diff --git a/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts b/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts index 7d3b466936..52e0931d4c 100644 --- a/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts +++ b/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts @@ -8,6 +8,7 @@ import { LIMIT_WALLPAPERS_EXCLUDE, SYSTEM_AUTHOR_ID, } from '../../../config'; +import { validateMaxdown } from '../../../src/components/Content/Maxdown/validateMaxdown'; import { parseKeywordsFromWallpaper } from '../../../src/components/Gallery/GalleryFilter/utils/parseKeywordsFromWallpaper'; import { FULLHD } from '../../../src/constants'; import { extractTitleFromContent } from '../../../src/utils/content/extractTitleFromContent'; @@ -20,10 +21,10 @@ import { getHardcodedWallpapersMetadataFilePaths } from './getHardcodedWallpaper * @@@ */ interface IWallpaperSerializedWithExtra extends IWallpaperSerialized { - metadataFilePath: string_file_path; - srcFilePath: string_file_path; - colorStatsFilePath: string_file_path; - contentFilePath: string_file_path; + readonly metadataFilePath: string_file_path; + readonly srcFilePath: string_file_path; + readonly colorStatsFilePath: string_file_path; + readonly contentFilePath: string_file_path; } /** @@ -112,9 +113,9 @@ async function findHardcodedWallpapers(showWarnings: boolean): Promise { const tmpFilePathRelative = '.tmp/file-to-import-organize.ts'; const tmpFilePath = join(process.cwd(), tmpFilePathRelative); diff --git a/scripts/utils/prettify.ts b/scripts/utils/prettify.ts index 97016737bf..ddca5738a9 100644 --- a/scripts/utils/prettify.ts +++ b/scripts/utils/prettify.ts @@ -4,6 +4,13 @@ import prettier from 'prettier'; import spaceTrim from 'spacetrim'; import { promisify } from 'util'; +/** + * Prettifies a file + * + * @param fileContents Contents of the file to prettify + * @param parser language of parser to use + * @returns Prettified file contents + */ export async function prettify(fileContents: string, parser = 'typescript'): Promise { try { return prettier.format(fileContents, { diff --git a/src/ai/prompt-templates/TODO.txt b/src/ai/prompt-templates/TODO.txt new file mode 100644 index 0000000000..7b3f46a83c --- /dev/null +++ b/src/ai/prompt-templates/TODO.txt @@ -0,0 +1 @@ +TODO: [🧠] Rename to `promptbook` OR `text-to-text` \ No newline at end of file diff --git a/src/ai/prompt-templates/getExecutionTools.ts b/src/ai/prompt-templates/getExecutionTools.ts new file mode 100644 index 0000000000..ae73a1bc94 --- /dev/null +++ b/src/ai/prompt-templates/getExecutionTools.ts @@ -0,0 +1,85 @@ +import { CallbackInterfaceTools } from '@promptbook/core'; +import { JavascriptEvalExecutionTools } from '@promptbook/execute-javascript'; +import { RemoteNaturalExecutionTools } from '@promptbook/remote-client'; +import type { ExecutionTools } from '@promptbook/types'; +import spaceTrim from 'spacetrim'; +import { IS_DEVELOPMENT, NEXT_PUBLIC_PROMPTBOOK_SERVER_URL } from '../../../config'; +import { isRunningInBrowser, isRunningInWebWorker } from '../../utils/isRunningInWhatever'; +import { uuid } from '../../utils/typeAliases'; +import { simpleTextDialogue } from '../../workers/dialogues/simple-text/simpleTextDialogue'; + +/** + * Theese are tools for PTP execution + * Internal cache for getPtpToolsForWorker + * + * @private + * @singleton + */ +let executionTools: ExecutionTools; + +/** + * Get PTP execution tools + * + * Note: Tools are cached, so it's safe to call this function multiple times + * Note: This function is available ONLY in browser or worker + * + * @returns ExecutionTools + */ +export function getExecutionTools(clientId: uuid): ExecutionTools { + if (!isRunningInWebWorker() && !isRunningInBrowser()) { + throw new Error('This function is available ONLY in browser or worker'); + } + + if (!executionTools) { + const isVerbose = IS_DEVELOPMENT; + + executionTools = { + natural: new RemoteNaturalExecutionTools({ + isVerbose, + remoteUrl: NEXT_PUBLIC_PROMPTBOOK_SERVER_URL, + path: '/promptbook/socket.io', + clientId, + }), + script: [ + new JavascriptEvalExecutionTools( + /* <- TODO: !! Change to JavascriptExecutionTools */ { + isVerbose: false /* <- Note: Only natural execution tools should be verbose */, + }, + ), + ], + userInterface: new CallbackInterfaceTools({ + isVerbose, + async callback(options) { + // TODO: !! Make util promptDialogueRequired + let answer: null | string = null; + + // TODO: Configure how many retries + for (let i = 0; i < 3; i++) { + const response = await simpleTextDialogue({ + ...options, + message: i === 0 ? options.prompt : options.prompt + ` (You need to put answer)`, + }); + + answer = response.answer; + + if (answer !== null && spaceTrim(answer) !== '') { + break; + } + } + + if (answer === null) { + throw new Error('User cancelled prompt or provided empty answers'); + } + + return answer; + }, + }), + }; + } + + return executionTools; +} + +/** + * TODO: [🧠] Maybe cache every clientId + */ diff --git a/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionTools.ts b/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionTools.ts new file mode 100644 index 0000000000..2dde0041f5 --- /dev/null +++ b/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionTools.ts @@ -0,0 +1,121 @@ +import type { + NaturalExecutionTools, + Prompt, + PromptChatResult, + PromptCompletionResult, + PromptResult, +} from '@promptbook/types'; +import spaceTrim from 'spacetrim'; +import { isRunningInNode } from '../../../utils/isRunningInWhatever'; +import { getSupabaseForServer } from '../../../utils/supabase/getSupabaseForServer'; +import { SupabaseLoggerWrapperOfNaturalExecutionToolsOptions } from './SupabaseLoggerWrapperOfNaturalExecutionToolsOptions'; + +/** + * Wrapper for any PtpExecutionTools which logs every request+result to Supabase. + */ +export class SupabaseLoggerWrapperOfNaturalExecutionTools implements NaturalExecutionTools { + public constructor(private readonly options: SupabaseLoggerWrapperOfNaturalExecutionToolsOptions) { + if (!isRunningInNode()) { + throw new Error('SupabaseLoggerWrapperOfExecutionTools can be used only on server'); + } + } + + /** + * Calls a chat model and logs the request+result + */ + public gptChat(prompt: Prompt): Promise { + return /* not await */ this.gptCommon(prompt); + } + + /** + * Calls a completion model and logs the request+result + */ + public gptComplete(prompt: Prompt): Promise { + return /* not await */ this.gptCommon(prompt); + } + + /** + * Calls both completion or chat model and logs the request+result + */ + public async gptCommon(prompt: Prompt): Promise { + const mark = 'gpt-call'; + const promptAt = new Date(); + performance.mark(`${mark}-start`); + + let promptResult: PromptResult; + + try { + switch (prompt.modelRequirements.variant) { + case 'CHAT': + promptResult = await this.options.naturalExecutionTools.gptChat(prompt); + break; + case 'COMPLETION': + promptResult = await this.options.naturalExecutionTools.gptComplete(prompt); + break; + default: + throw new Error(`Unknown model variant "${prompt.modelRequirements.variant}"`); + } + } catch (error) { + console.error('SupabaseLoggerWrapperOfNaturalExecutionTools', { error }); + throw error; + } + + performance.mark(`${mark}-end`); + const resultAt = new Date(); + + if (this.options.isVerbose) { + console.info( + spaceTrim( + (block) => ` + ===========================[ Chat: ]=== + [🧑] ${block(prompt.content)} + [🤖] ${block(promptResult.content)} + --- + Executed in ${block( + performance.measure(mark, `${mark}-start`, `${mark}-end`).duration.toString(), + )}ms + ${(promptResult.rawResponse as any).usage?.total_tokens} tokens used + ===========================[ /Chat ]=== + `, + ), + ); + } + + // Note: We do not want to wait for the insert to the database + /* not await */ getSupabaseForServer() + .from('PromptExecution') + .insert( + { + clientId: this.options.clientId, + ptpUrl: prompt.ptbkUrl /* <- TODO: [🧠] Change to ptbkUrl OR keep */, + promptAt, + promptContent: prompt.content, + promptModelRequirements: prompt.modelRequirements, + promptParameters: prompt.parameters, + resultAt, + resultContent: promptResult.content, + usedModel: promptResult.model, + rawResponse: promptResult.rawResponse, + + // <- TODO: [💹] There should be link to wallpaper site which is the prompt for (to analyze cost per wallpaper) + // <- TODO: Maybe use here more precise performance measure + } as any /* <- TODO: [🖍] It is working in runtime BUT for some strange reason it invokes typescript error */, + ) + .then((insertResult) => { + // TODO: !! Util isInsertSuccessfull + + if (this.options.isVerbose) { + console.info('ChatThread', { insertResult }); + } + }); + + return promptResult; + } +} + +/** + * TODO: [🧠] Best name for this class "SupabaseLoggerWrapperOfNaturalExecutionTools" vs "NaturalExecutionToolsWithSupabaseLogger" or just helper "withSupabaseLogger" + * TODO: Log also failed results + * TODO: [🧠] Maybe do equivalent for UserInterfaceTools OR make this for whole ExecutionTools + * TODO: Create abstract LoggerWrapperOfNaturalExecutionTools which can be extended to implement more loggers + */ diff --git a/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionToolsOptions.ts b/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionToolsOptions.ts new file mode 100644 index 0000000000..f0957217e6 --- /dev/null +++ b/src/ai/prompt-templates/logger/SupabaseLoggerWrapperOfNaturalExecutionToolsOptions.ts @@ -0,0 +1,18 @@ +import type { CommonExecutionToolsOptions, NaturalExecutionTools } from '@promptbook/types'; +import type { uuid } from '../../../utils/typeAliases'; + +/** + * Options for SupabaseLoggerWrapperOfNaturalExecutionTools + */ +export interface SupabaseLoggerWrapperOfNaturalExecutionToolsOptions extends CommonExecutionToolsOptions { + /** + * Execution tools to use + * Theese tools will be wrapped in a logger for each client to log all requests + */ + readonly naturalExecutionTools: NaturalExecutionTools; + + /** + * Client responsible for the requests + */ + readonly clientId: uuid; +} diff --git a/src/ai/prompt-templates/webgptPtpLibrary.ts b/src/ai/prompt-templates/webgptPtpLibrary.ts new file mode 100644 index 0000000000..bc805faf70 --- /dev/null +++ b/src/ai/prompt-templates/webgptPtpLibrary.ts @@ -0,0 +1,38 @@ +import { PromptTemplatePipelineLibrary } from '@promptbook/core'; +import updateWebsiteContentCs from '../../../promptbook/update-website-content-cs.ptbk.md'; +import updateWebsiteContent from '../../../promptbook/update-website-content.ptbk.md'; +import writeWebsiteContentCs from '../../../promptbook/write-website-content-cs.ptbk.md'; +import writeWebsiteContent from '../../../promptbook/write-website-content.ptbk.md'; + +/** + * This is The main library of prompt template pipelines for WebGPT app + * + * @singleton + */ +export const webgptPtpLibrary = PromptTemplatePipelineLibrary.fromSources({ + writeWebsiteContentCs, + writeWebsiteContent, + updateWebsiteContent, + updateWebsiteContentCs, +}); + +/* +TODO: [👧] + +interface ptbkLibrary_writeWebsiteContent_InputParams { + readonly title: string; + readonly assignment: string; +} + +interface ptbkLibrary_writeWebsiteContent_OutputParams { + readonly contentBody: string; + readonly keywords: string; + readonly enhancedTitle: string; + readonly claim: string; +} + +*/ + +/** + * TODO: [🧠] !! This it should be code-generated WITH types by @promptbook/generator library + */ diff --git a/src/ai/recommendation/pickMostRecommended.ts b/src/ai/recommendation/pickMostRecommended.ts index a04cadbcde..b045bebf2a 100644 --- a/src/ai/recommendation/pickMostRecommended.ts +++ b/src/ai/recommendation/pickMostRecommended.ts @@ -5,8 +5,8 @@ import { wallpaperToVector } from './wallpaperToVector'; import { wallpaperVectorsDistanceSquared } from './wallpaperVectorsDistanceSquared'; interface PickMostRecommendedOptions { - wallpapersWithLikeness: Array; - wallpapersToPick: Array; + readonly wallpapersWithLikeness: Array; + readonly wallpapersToPick: Array; } /** diff --git a/src/ai/text-to-image/0-interfaces/ImageGenerator.ts b/src/ai/text-to-image/0-interfaces/ImageGenerator.ts new file mode 100644 index 0000000000..c33023ef1a --- /dev/null +++ b/src/ai/text-to-image/0-interfaces/ImageGenerator.ts @@ -0,0 +1,19 @@ +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import { ImagePrompt } from './ImagePrompt'; +import { ImagePromptResult } from './ImagePromptResult'; + +/** + * Represents any image generator (like MidJourney, Dall-E, StableDiffusion, etc.) or more in general any software that can give images from text. + */ +export interface ImageGenerator { + /** + * Generates an image from a prompt + * + * @param prompt to generate new image from + * @returns generated image(s) + */ + generate( + prompt: ImagePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise>; +} diff --git a/src/ai/text-to-image/0-interfaces/ImagePrompt.ts b/src/ai/text-to-image/0-interfaces/ImagePrompt.ts new file mode 100644 index 0000000000..048d3151d5 --- /dev/null +++ b/src/ai/text-to-image/0-interfaces/ImagePrompt.ts @@ -0,0 +1,36 @@ +/** + * Represents a prompt for an image generator + */ + +import { string_model_name } from '@promptbook/types'; +import { IVector } from 'xyzt'; +import { string_image_prompt } from '../../../utils/typeAliases'; + +export interface ImagePrompt { + /** + * The text of the prompt + * + * Note: This is not a template, this is exactly the text that will be sent to the model + * @example "Cat in a hat --v 5" + */ + readonly content: string_image_prompt; + + /** + * The model for generating images + * + * @example "midjourney-5", "dalle-3",... + */ + readonly model: string_model_name; + + /** + * Size of the generated image + */ + readonly size?: IVector; + + /** + * Additional settings for the model + * + * @example { "style": "natural" } + */ + readonly modelSettings?: Record; +} diff --git a/src/ai/text-to-image/0-interfaces/ImagePromptResult.ts b/src/ai/text-to-image/0-interfaces/ImagePromptResult.ts new file mode 100644 index 0000000000..cbb03bcfaa --- /dev/null +++ b/src/ai/text-to-image/0-interfaces/ImagePromptResult.ts @@ -0,0 +1,28 @@ +import { string_url_image } from '@promptbook/types'; +import { ImagePrompt } from './ImagePrompt'; + +/** + * Represents a result of a prompt for an image generator + */ + +export interface ImagePromptResult { + /** + * The image generated from the prompt + */ + readonly imageSrc: string_url_image; + + /** + * The original prompt that generated this result + */ + readonly originalPrompt: ImagePrompt; + + /** + * The normalized/postprocessed prompt used to generate this result + */ + readonly normalizedPrompt: ImagePrompt; + + /** + * Raw response from the model + */ + readonly rawResponse: object; +} \ No newline at end of file diff --git a/src/ai/text-to-image/TODO.txt b/src/ai/text-to-image/TODO.txt new file mode 100644 index 0000000000..7ecb449b5c --- /dev/null +++ b/src/ai/text-to-image/TODO.txt @@ -0,0 +1,4 @@ +TODO: [🧠] FaceSwapImageGenerator +TODO: Implement MidJourney +TODO: Implement real photobank: + > fetch(`https://api.unsplash.com/search/photos?query=${keywords.join(',')}` \ No newline at end of file diff --git a/src/ai/text-to-image/dalle/DalleImageGenerator.ts b/src/ai/text-to-image/dalle/DalleImageGenerator.ts new file mode 100644 index 0000000000..025d1137ca --- /dev/null +++ b/src/ai/text-to-image/dalle/DalleImageGenerator.ts @@ -0,0 +1,134 @@ +import fetch from 'node-fetch'; +import OpenAI from 'openai'; +import { ImageGenerateParams } from 'openai/resources'; +import spaceTrim from 'spacetrim'; +import { Writable } from 'type-fest'; +import { Vector } from 'xyzt'; +import { CDN } from '../../../../config'; +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import { generateDalleCdnKey } from '../../../utils/cdn/utils/generateDalleCdnKey'; +import { isRunningInNode } from '../../../utils/isRunningInWhatever'; +import type { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import type { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; +import type { DalleImageGeneratorOptions } from './interfaces/DalleImageGeneratorOptions'; +import type { DallePrompt } from './interfaces/DallePrompt'; + +/** + * Dalle image generator by OpenAI + */ +export class DalleImageGenerator implements ImageGenerator { + private readonly openai: OpenAI; + + public constructor(private readonly options: DalleImageGeneratorOptions) { + if (!isRunningInNode()) { + throw new Error('DalleImageGenerator is available only in server/node, use RemoteImageGenerator instead'); + } + + this.openai = new OpenAI({ + apiKey: options.openAiApiKey, + }); + } + + public async generate( + prompt: DallePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise> { + const originalPrompt = prompt; + const normalizedPrompt: Writable = { ...prompt }; + + if (normalizedPrompt.model === 'dalle-2') { + normalizedPrompt.model = 'dall-e-2'; + } else if (normalizedPrompt.model === 'dalle-3') { + normalizedPrompt.model = 'dall-e-3'; + } + + if (this.options.isVerbose) { + console.info( + spaceTrim( + (block) => ` + 👨‍🎨 Generating image via ${normalizedPrompt.model} + + ${block(originalPrompt.content)} + `, + ), + ); + } + + // TODO: Maybe check here Dalle version + + if (!normalizedPrompt.size) { + if (normalizedPrompt.model === 'dall-e-2') { + normalizedPrompt.size = new Vector(1024, 1024); + } else if (normalizedPrompt.model === 'dall-e-3') { + normalizedPrompt.size = new Vector(1792, 1024); + } else { + throw new Error(`Unknown Dalle version ${normalizedPrompt.model}`); + } + } + + normalizedPrompt.size = Vector.fromObject(normalizedPrompt.size || {}); + + const rawRequest = { + prompt: normalizedPrompt.content, + model: normalizedPrompt.model, + size: `${normalizedPrompt.size.x}x${normalizedPrompt.size.y}`, + user: this.options.user, + ...normalizedPrompt.modelSettings, + } as ImageGenerateParams; + + const rawResponse = await this.openai.images.generate(rawRequest); + + if (rawResponse.data.length !== 1) { + throw new Error(`Expected 1 image, got ${rawResponse.data.length}`); + } + + const responseImage = rawResponse.data[0]!; + + const imageSrc = responseImage.url; + + if (!imageSrc) { + throw new Error(`The image src is empty`); + } + + const imageArrayBuffer = await fetch(imageSrc).then((response) => response.arrayBuffer()); + const imageBuffer = Buffer.from(imageArrayBuffer); + + const key = generateDalleCdnKey(prompt, imageBuffer); + await CDN.setItem(key, { + type: 'image/png', // <- TODO: Is Dalle always creating PNGs? + data: imageBuffer, + }); + + const imageUrl = CDN.getItemUrl(key); + + if (responseImage.revised_prompt) { + normalizedPrompt.content = responseImage.revised_prompt; + } + + if (this.options.isVerbose) { + console.info( + spaceTrim(` + 👨‍🎨 Image generated + + ${imageSrc} + `), + ); + } + + return [ + { + imageSrc: imageUrl.href /* <- Note: this is intended, we want to pass ahead the URL on our CDN + NOT the temporary one provided by Dalle */, + originalPrompt, + normalizedPrompt, + rawResponse, + }, + ]; + } +} + +/** + * TODO: Annotate + * TODO: Implement + * TODO: !! Use taskProgress + */ diff --git a/src/ai/text-to-image/dalle/interfaces/DalleImageGeneratorOptions.ts b/src/ai/text-to-image/dalle/interfaces/DalleImageGeneratorOptions.ts new file mode 100644 index 0000000000..cc4cffbc3e --- /dev/null +++ b/src/ai/text-to-image/dalle/interfaces/DalleImageGeneratorOptions.ts @@ -0,0 +1,18 @@ +import { CommonExecutionToolsOptions, string_token } from '@promptbook/types'; + +/** + * Options for Dalle image generator by OpenAI + */ +export interface DalleImageGeneratorOptions extends CommonExecutionToolsOptions { + /** + * OpenAI API key + */ + openAiApiKey: string_token; + + /** + * A unique identifier representing your end-user, which can help OpenAI to monitor + * and detect abuse. [Learn more](/docs/guides/safety-best-practices/end-user-ids). + */ + user?: string_token; +} + diff --git a/src/ai/text-to-image/dalle/interfaces/DallePrompt.ts b/src/ai/text-to-image/dalle/interfaces/DallePrompt.ts new file mode 100644 index 0000000000..1fe595d990 --- /dev/null +++ b/src/ai/text-to-image/dalle/interfaces/DallePrompt.ts @@ -0,0 +1,34 @@ +import { ImagePrompt } from '../../0-interfaces/ImagePrompt'; + +/** + * Prompt to Dalle image generator + */ +export interface DallePrompt extends ImagePrompt { + /** + * Which dalle version to use + * + * Note: "dalle-x" and "dall-e-x" are aliases + */ + model: 'dalle-2' | 'dalle-3' | 'dall-e-2' | 'dall-e-3'; + + modelSettings?: { + /** + * The style of the generated images. Must be one of `vivid` or `natural`. Vivid + * causes the model to lean towards generating hyper-real and dramatic images. + * Natural causes the model to produce more natural, less hyper-real looking + * images. This param is only supported for Dalle-3. + */ + style?: 'natural' | 'vivid'; + + /** + * The quality of the image that will be generated. `hd` creates images with finer + * details and greater consistency across the image. This param is only supported + * for `dall-e-3`. + */ + quality?: 'standard' | 'hd'; + }; +} + +/** + * TODO: Allow to put variantsCount + */ diff --git a/src/ai/text-to-image/getImageGenerator.ts b/src/ai/text-to-image/getImageGenerator.ts new file mode 100644 index 0000000000..4736c7d882 --- /dev/null +++ b/src/ai/text-to-image/getImageGenerator.ts @@ -0,0 +1,45 @@ +import { IS_DEVELOPMENT, NEXT_PUBLIC_IMAGE_SERVER_URL } from '../../../config'; +import { isRunningInBrowser, isRunningInWebWorker } from '../../utils/isRunningInWhatever'; +import { uuid } from '../../utils/typeAliases'; +import { ImageGenerator } from './0-interfaces/ImageGenerator'; +import { RemoteImageGenerator } from './remote/RemoteImageGenerator'; + +/** + * This is an image generator + * Internal cache for getImageGenerator + * + * @private + * @singleton + */ +let imageGenerator: ImageGenerator; + +/** + * Get the image generator + * + * Note: Image generator is cached, so it's safe to call this function multiple times + * Note: This function is available ONLY in browser or worker + * + * @returns ImageGenerator based on OpenAI Dalle + */ +export function getImageGenerator(clientId: uuid): ImageGenerator { + if (!isRunningInWebWorker() && !isRunningInBrowser()) { + throw new Error('This function is available ONLY in browser or worker'); + } + + if (!imageGenerator) { + const isVerbose = IS_DEVELOPMENT; + + imageGenerator = new RemoteImageGenerator({ + isVerbose, + remoteUrl: NEXT_PUBLIC_IMAGE_SERVER_URL, + path: '/promptimage/socket.io', + clientId, + }); + } + + return imageGenerator; +} + +/** + * TODO: [🧠] Maybe cache every clientId + */ diff --git a/src/ai/text-to-image/getPhotobank.ts b/src/ai/text-to-image/getPhotobank.ts new file mode 100644 index 0000000000..b8bf3dd1ae --- /dev/null +++ b/src/ai/text-to-image/getPhotobank.ts @@ -0,0 +1,43 @@ +import { uuid } from '@promptbook/types'; +import { IS_DEVELOPMENT } from '../../../config'; +import { isRunningInBrowser, isRunningInWebWorker } from '../../utils/isRunningInWhatever'; +import { ImageGenerator } from './0-interfaces/ImageGenerator'; +import { PregeneratedPhotobank } from './photobank/PregeneratedPhotobank'; + +/** + * This is an photobank + * Internal cache for getPhotobank + * + * @private + * @singleton + */ +let photobank: PregeneratedPhotobank; + +/** + * Get the photobank + * + * Note: Photobank is cached, so it's safe to call this function multiple times + * Note: This function is available ONLY in browser or worker + * + * @returns ImageGenerator based on pregenerated MidJourney images + */ +export function getPhotobank(clientId: uuid): ImageGenerator { + if (!isRunningInWebWorker() && !isRunningInBrowser()) { + throw new Error('This function is available ONLY in browser or worker'); + } + + if (!photobank) { + const isVerbose = IS_DEVELOPMENT; + + photobank = new PregeneratedPhotobank({ + isVerbose, + clientId, + }); + } + + return photobank; +} + +/** + * TODO: [🧠] Maybe cache every clientId + */ diff --git a/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGenerator.ts b/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGenerator.ts new file mode 100644 index 0000000000..3a589dcf45 --- /dev/null +++ b/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGenerator.ts @@ -0,0 +1,99 @@ +import spaceTrim from 'spacetrim'; +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import { isRunningInNode } from '../../../utils/isRunningInWhatever'; +import { getSupabaseForServer } from '../../../utils/supabase/getSupabaseForServer'; +import { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import { ImagePrompt } from '../0-interfaces/ImagePrompt'; +import { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; +import { SupabaseLoggerWrapperOfImageGeneratorOptions } from './SupabaseLoggerWrapperOfImageGeneratorOptions'; + +/** + * Wrapper for any ImageGenerator which logs every request+result to Supabase. + */ +export class SupabaseLoggerWrapperOfImageGenerator implements ImageGenerator { + public constructor(private readonly options: SupabaseLoggerWrapperOfImageGeneratorOptions) { + if (!isRunningInNode()) { + throw new Error('SupabaseLoggerWrapperOfImageGenerator can be used only on server'); + } + } + + /** + * Generates image and log the result + */ + public async generate( + prompt: ImagePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise> { + const mark = 'gpt-call'; + const promptAt = new Date(); + performance.mark(`${mark}-start`); + + try { + const promptResults = await this.options.imageGenerator.generate(prompt, onProgress); + + performance.mark(`${mark}-end`); + const resultAt = new Date(); + + for (const promptResult of promptResults) { + if (this.options.isVerbose) { + console.info( + spaceTrim( + (block) => ` + ===========================[ Chat: ]=== + [🧑] ${block(prompt.content)} + [🤖] Generated ${block(promptResult.imageSrc)} + --- + Executed in ${block( + performance.measure(mark, `${mark}-start`, `${mark}-end`).duration.toString(), + )}ms + ===========================[ /Chat ]=== + `, + // <- TODO: Maybe put here some token spend metrics + ), + ); + } + + // Note: We do not want to wait for the insert to the database + /* not await */ getSupabaseForServer() + .from('ImagePromptExecution') + .insert( + { + // Prompt: + clientId: this.options.clientId, + ptbkUrl: null /* <- TODO: [🧠] Add here some identification */, + promptAt, + prompt: prompt, + promptContent: prompt.content, + + // Prompt Result: + resultAt, + result: promptResult, + + resultSrc: promptResult.imageSrc, + usedModel: promptResult.normalizedPrompt.model, + rawResponse: promptResult.rawResponse, + + // <- TODO: [💹] There should be link to wallpaper site which is the prompt for (to analyze cost per wallpaper) + // <- TODO: Maybe use here more precise performance measure + } as any /* <- TODO: [🖍] It is working in runtime BUT for some strange reason it invokes typescript error */, + ) + .then((insertResult) => { + // TODO: !! Util isInsertSuccessfull + + if (this.options.isVerbose) { + console.info('ChatThread', { insertResult }); + } + }); + } + + return promptResults; + } catch (error) { + console.error('SupabaseLoggerWrapperOfImageGenerator', { error }); + throw error; + } + } +} + +/** + * TODO: Log also failed results + */ diff --git a/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGeneratorOptions.ts b/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGeneratorOptions.ts new file mode 100644 index 0000000000..bd9af18b85 --- /dev/null +++ b/src/ai/text-to-image/logger/SupabaseLoggerWrapperOfImageGeneratorOptions.ts @@ -0,0 +1,19 @@ +import type { CommonExecutionToolsOptions } from '@promptbook/types'; +import type { uuid } from '../../../utils/typeAliases'; +import { ImageGenerator } from '../0-interfaces/ImageGenerator'; + +/** + * Options for SupabaseLoggerWrapperOfImageGenerator + */ +export interface SupabaseLoggerWrapperOfImageGeneratorOptions extends CommonExecutionToolsOptions { + /** + * Execution tools to use + * This generator will be wrapped in a logger for each client to log all requests + */ + readonly imageGenerator: ImageGenerator; + + /** + * Client responsible for the requests + */ + readonly clientId: uuid; +} diff --git a/src/ai/text-to-image/nothing/NothingImageGenerator.ts b/src/ai/text-to-image/nothing/NothingImageGenerator.ts new file mode 100644 index 0000000000..fc097664a1 --- /dev/null +++ b/src/ai/text-to-image/nothing/NothingImageGenerator.ts @@ -0,0 +1,21 @@ +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import { ImagePrompt } from '../0-interfaces/ImagePrompt'; +import { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; + +/** + * Void image generator that does nothing but behaves like a real image generator + */ +export class NothingImageGenerator implements ImageGenerator { + public constructor() {} + + /** + * Whatever you do, it will always return an empty array + */ + public async generate( + prompt: ImagePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise> { + return []; + } +} diff --git a/src/ai/text-to-image/photobank/PregeneratedPhotobank.ts b/src/ai/text-to-image/photobank/PregeneratedPhotobank.ts new file mode 100644 index 0000000000..3a9676acd8 --- /dev/null +++ b/src/ai/text-to-image/photobank/PregeneratedPhotobank.ts @@ -0,0 +1,118 @@ +import { NaturalExecutionTools } from '@promptbook/core/esm/typings/execution/NaturalExecutionTools'; +import { extractAllListItemsFromMarkdown } from '@promptbook/utils'; +import { parseKeywordsFromString } from 'n12'; +import spaceTrim from 'spacetrim'; +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import { SearchPhotobankResult } from '../../../pages/api/pregenerated-photobank/search'; +import { throwIfErrorResponse } from '../../../utils/errors/ResponseWithError'; +import { getExecutionTools } from '../../prompt-templates/getExecutionTools'; +import { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import { ImagePrompt } from '../0-interfaces/ImagePrompt'; +import { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; +import type { PregeneratedPhotobankOptions } from './interfaces/PregeneratedPhotobankOptions'; + +/** + * Pre-generated photobank behaves like a regular image generator, but it uses pre-generated images instead of generating new ones. + * This is useful for quickly and cheap offering a user a choice of images. + * + * It searches for images in the database by keywords. The keywords are generated from the prompt using GPT. + * + * @singleton + */ +export class PregeneratedPhotobank implements ImageGenerator { + private readonly naturalExecutionTools: NaturalExecutionTools; + + public constructor(private readonly options: PregeneratedPhotobankOptions) { + this.naturalExecutionTools = getExecutionTools(options.clientId).natural; + } + + /** + * Searches for images in the database + * + * @param prompt From prompt, keywords are extracted via GPT and used to search for images + * @param onProgress + * @returns Multiple images + */ + public async generate( + prompt: ImagePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise> { + if (this.options.isVerbose) { + console.info(`📷 Generating image via photobank`); + } + + const keywordsPromptResponse = await this.naturalExecutionTools.gptComplete({ + modelRequirements: { + variant: 'COMPLETION', + maxTokens: 150 /* <- TODO: !! Tweak */, + }, + content: spaceTrim( + (block) => ` + ${block(prompt.content)} + + ## Keywords + - website + + `, + ), + ptbkUrl: '#keywords', + parameters: { + imagePrompt: prompt.content, + }, + }); + + /* + TODO: Make ptbk from this + TODO: THis is not working much: + > Butterfly with green wings + > Results in: + > keywords [ + > 'branding', 'transformation', + > 'growth', 'nature', + > 'beauty', 'ecology', + > 'sustainability', 'vibrant', + > 'colorful', 'lively', + > 'harmony', 'balance' + > ] + + */ + + const keywords = extractAllListItemsFromMarkdown(keywordsPromptResponse.content).flatMap( + (item) => Array.from(parseKeywordsFromString(item)) /* <- Note: [7] */, + ); + + const response = await fetch( + `/api/pregenerated-photobank/search?${keywords.map((keyword) => `keywords=${keyword}`).join('&')}`, + ); + const rawResponse = (await response.json()) as SearchPhotobankResult; + throwIfErrorResponse(rawResponse); + + const { images } = rawResponse; + + if (this.options.isVerbose) { + console.info({ + prompt, + keywordsPromptResponse, + keywords, + images, + rawResponse, + }); + } + + return images.map(({ src }) => ({ + imageSrc: src, + originalPrompt: prompt, + normalizedPrompt: { + model: 'photobank', + content: '' /* <- TODO: [⛹️‍♀️] Pass here original prompt */, + }, + rawResponse, + })); + } +} + +/** + * TODO: !! Use taskProgress + * TODO: Watch cost of LLM usage here + * TODO: [🧠][7] Multiword keywords + */ diff --git a/src/ai/text-to-image/photobank/interfaces/PregeneratedPhotobankOptions.ts b/src/ai/text-to-image/photobank/interfaces/PregeneratedPhotobankOptions.ts new file mode 100644 index 0000000000..6d1ac90c4f --- /dev/null +++ b/src/ai/text-to-image/photobank/interfaces/PregeneratedPhotobankOptions.ts @@ -0,0 +1,12 @@ +import { CommonExecutionToolsOptions } from '@promptbook/types'; +import { uuid } from '../../../../utils/typeAliases'; + +/** + * Search options for the pregenerated photobank + */ +export interface PregeneratedPhotobankOptions extends CommonExecutionToolsOptions { + /** + * Client ID for the GPT usage + */ + clientId: uuid; +} diff --git a/src/ai/text-to-image/remote/RemoteImageGenerator.ts b/src/ai/text-to-image/remote/RemoteImageGenerator.ts new file mode 100644 index 0000000000..b3587530db --- /dev/null +++ b/src/ai/text-to-image/remote/RemoteImageGenerator.ts @@ -0,0 +1,70 @@ +import type { Socket } from 'socket.io-client'; +import { io } from 'socket.io-client'; +import { WebgptTaskProgress } from '../../../components/TaskInProgress/task/WebgptTaskProgress'; +import type { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import type { ImagePrompt } from '../0-interfaces/ImagePrompt'; +import type { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; +import type { Imgs_Error } from './interfaces/Imgs_Error'; +import type { Imgs_Request } from './interfaces/Imgs_Request'; +import type { Imgs_Response } from './interfaces/Imgs_Response'; +import type { RemoteNaturalExecutionToolsOptions } from './interfaces/RemoteNaturalExecutionToolsOptions'; + +/** + * Image generator called remotely + */ +export class RemoteImageGenerator implements ImageGenerator { + public constructor(private readonly options: RemoteNaturalExecutionToolsOptions) {} + + /** + * Creates a connection to the remote proxy server. + */ + private makeConnection(): Promise { + return new Promise((resolve, reject) => { + const socket = io(this.options.remoteUrl.href, { + path: this.options.path, + // path: `${this.remoteUrl.pathname}/socket.io`, + transports: [/*'websocket', <- TODO: [🌬] Make websocket transport work */ 'polling'], + }); + + console.log('Connecting to', this.options.remoteUrl.href, { socket }); + + socket.on('connect', () => { + resolve(socket); + }); + + setTimeout(() => { + reject(new Error(`Timeout while connecting to ${this.options.remoteUrl.href}`)); + }, 60000 /* <- TODO: Timeout to config */); + }); + } + + public async generate( + prompt: ImagePrompt, + onProgress: (taskProgress: WebgptTaskProgress) => void, + ): Promise> { + const socket = await this.makeConnection(); + socket.emit('request', { clientId: this.options.clientId, prompt } satisfies Imgs_Request); + + const promptResult = await new Promise>((resolve, reject) => { + socket.on('response', (response: Imgs_Response) => { + resolve(response.promptResult); + socket.disconnect(); + }); + socket.on('error', (error: Imgs_Error) => { + // <- TODO: Custom type of error + reject(new Error(error.errorMessage)); + socket.disconnect(); + }); + + // TODO: !! Use onProgress + }); + + socket.disconnect(); + + return promptResult; + } +} + +/** + * TODO: [🤹‍♂️] RemoteImageGenerator should extend Destroyable and implement IDestroyable + */ diff --git a/src/ai/text-to-image/remote/delete/RemoteImageGenerator.ts.delete b/src/ai/text-to-image/remote/delete/RemoteImageGenerator.ts.delete new file mode 100644 index 0000000000..6a8a9b6ab2 --- /dev/null +++ b/src/ai/text-to-image/remote/delete/RemoteImageGenerator.ts.delete @@ -0,0 +1,42 @@ +import { uuid } from '@promptbook/types'; +import { ImageGenerator } from '../../0-interfaces/ImageGenerator'; +import { ImagePrompt } from '../../0-interfaces/ImagePrompt'; +import { ImagePromptResult } from '../../0-interfaces/ImagePromptResult'; +import { RemoteImageGeneratorResponse } from './createRemoteImageGeneratorRouteHandler.ts.delete'; + +/** + * Image generator called remotely + */ +export class RemoteImageGenerator implements ImageGenerator { + public constructor(private readonly clientId: uuid, private readonly subroute: string) {} + + public async generate(prompt: ImagePrompt): Promise> { + const response = await fetch( + `/api/text-to-image/${this.subroute}?clientId=${ + /* <- TODO: [⛹️‍♂️] Send clientId through headers */ + this.clientId + }`, + { + method: 'POST', + body: JSON.stringify(prompt), + headers: { + 'Content-Type': 'application/json', + }, + }, + ); + + const responseJson = (await response.json()) as RemoteImageGeneratorResponse; + + if (response.status !== 201) { + if ((responseJson as any) /* <-[🌋] */.message) { + throw new Error((responseJson as any) /* <-[🌋] */.message); + } else { + throw new Error(`Expected 201 status code, got ${response.status}`); + } + } + + console.log('!!', responseJson); + + return responseJson.promptResult; + } +} diff --git a/src/ai/text-to-image/remote/delete/TODO.txt b/src/ai/text-to-image/remote/delete/TODO.txt new file mode 100644 index 0000000000..af29f0eda5 --- /dev/null +++ b/src/ai/text-to-image/remote/delete/TODO.txt @@ -0,0 +1 @@ +TODO: This is remove server implemented in NEXT not via sockets \ No newline at end of file diff --git a/src/ai/text-to-image/remote/delete/createRemoteImageGeneratorRouteHandler.ts.delete b/src/ai/text-to-image/remote/delete/createRemoteImageGeneratorRouteHandler.ts.delete new file mode 100644 index 0000000000..001de3783e --- /dev/null +++ b/src/ai/text-to-image/remote/delete/createRemoteImageGeneratorRouteHandler.ts.delete @@ -0,0 +1,66 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import type { uuid } from '../../../utils/typeAliases'; +import { isValidClientId } from '../../../utils/validators/isValidClientId'; +import type { ImageGenerator } from '../0-interfaces/ImageGenerator'; +import type { ImagePrompt } from '../0-interfaces/ImagePrompt'; +import type { ImagePromptResult } from '../0-interfaces/ImagePromptResult'; + +export interface RemoteImageGeneratorResponse { + // TODO: [🌋] ErrorableResponse + readonly promptResult: Array; +} + +interface CreateRemoteImageGeneratorRouteHandlerOptions { + /** + * Provides an image generator for a given client + */ + createImageGenerator(clientId: uuid): ImageGenerator; +} + +/** + * Creates API endpoint handler to register new site into the system + */ +export function createRemoteImageGeneratorRouteHandler(options: CreateRemoteImageGeneratorRouteHandlerOptions) { + const { createImageGenerator } = options; + + return async function registerHandler( + request: NextApiRequest, + response: NextApiResponse, + ) { + if (request.method !== 'POST') { + return response.status(400).json({ message: 'Only POST method is allowed' } as any /* <-[🌋] */); + } + + const clientId = request.query.clientId; + + if (!isValidClientId(clientId)) { + return response.status(400).json( + { + message: + 'GET param clientId is not valid client ID' /* <- TODO: [🌻] Unite wrong GET param message */, + } as any /* <-[🌋] */, + ); + } + + const prompt = request.body as ImagePrompt; + + try { + const imageGenerator = createImageGenerator(clientId); + const promptResult = await imageGenerator.generate(prompt); + + return response.status(201).json({ + promptResult, + } as RemoteImageGeneratorResponse); + } catch (error) { + if (!(error instanceof Error)) { + throw error; + } + + return response.status(500).json( + { + message: error.message, + } as any /* <-[🌋] */, + ); + } + }; +} diff --git a/src/ai/text-to-image/remote/interfaces/CreateRemoteImageGeneratorServerOptions.ts b/src/ai/text-to-image/remote/interfaces/CreateRemoteImageGeneratorServerOptions.ts new file mode 100644 index 0000000000..712014580a --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/CreateRemoteImageGeneratorServerOptions.ts @@ -0,0 +1,22 @@ +import type { CommonExecutionToolsOptions, string_uri, uuid } from '@promptbook/types'; +import type { ImageGenerator } from '../../0-interfaces/ImageGenerator'; + +export interface CreateRemoteImageGeneratorServerOptions extends CommonExecutionToolsOptions { + /** + * Port on which the server will listen + */ + readonly port: number; + + /** + * Path for the Socket.io server to listen + * + * @default '/socket.io' + * @example '/promptbook/socket.io' + */ + readonly path: string_uri; + + /** + * Provides an image generator for a given client + */ + createImageGenerator(clientId: uuid): ImageGenerator; +} diff --git a/src/ai/text-to-image/remote/interfaces/Imgs_Error.ts b/src/ai/text-to-image/remote/interfaces/Imgs_Error.ts new file mode 100644 index 0000000000..401bd154b6 --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/Imgs_Error.ts @@ -0,0 +1,11 @@ +/** + * Socket.io error for remote image generation + * + * This is sent from server to client when error occurs and stops the process + */ +export interface Imgs_Error { + /** + * The error message which caused the error + */ + readonly errorMessage: string; +} diff --git a/src/ai/text-to-image/remote/interfaces/Imgs_Progress.ts b/src/ai/text-to-image/remote/interfaces/Imgs_Progress.ts new file mode 100644 index 0000000000..760f228195 --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/Imgs_Progress.ts @@ -0,0 +1,14 @@ +import type { TaskProgress } from '@promptbook/types'; + +/** + * Socket.io progress for remote image generation + * + * This is sent from server to client arbitrarily and may be sent multiple times + */ +export interface Imgs_Progress { + + /** + * The progress of image generation + */ + readonly taskProgress: TaskProgress; +} diff --git a/src/ai/text-to-image/remote/interfaces/Imgs_Request.ts b/src/ai/text-to-image/remote/interfaces/Imgs_Request.ts new file mode 100644 index 0000000000..f40e7cf99f --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/Imgs_Request.ts @@ -0,0 +1,19 @@ +import type { uuid } from '../../../../utils/typeAliases'; +import type { ImagePrompt } from '../../0-interfaces/ImagePrompt'; + +/** + * Socket.io progress for remote image generation + * + * This is a request from client to server + */ +export interface Imgs_Request { + /** + * Client responsible for the requests + */ + readonly clientId: uuid; + + /** + * The Prompt to execute + */ + readonly prompt: ImagePrompt; +} diff --git a/src/ai/text-to-image/remote/interfaces/Imgs_Response.ts b/src/ai/text-to-image/remote/interfaces/Imgs_Response.ts new file mode 100644 index 0000000000..2fa0d9fb55 --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/Imgs_Response.ts @@ -0,0 +1,15 @@ +import { ImagePromptResult } from '../../0-interfaces/ImagePromptResult'; + +/** + * Socket.io error for remote image generation + * + * This is sent from server to client when the image generation is complete + */ +export interface Imgs_Response { + /** + * The results of the image generation + * + * Note: Typically there will be only one result, but it is possible to have more than one + */ + promptResult: Array; +} diff --git a/src/ai/text-to-image/remote/interfaces/RemoteNaturalExecutionToolsOptions.ts b/src/ai/text-to-image/remote/interfaces/RemoteNaturalExecutionToolsOptions.ts new file mode 100644 index 0000000000..2e9c8a1cf1 --- /dev/null +++ b/src/ai/text-to-image/remote/interfaces/RemoteNaturalExecutionToolsOptions.ts @@ -0,0 +1,26 @@ +import type { CommonExecutionToolsOptions } from '@promptbook/types'; +import type { uuid,string_uri } from '../../../../utils/typeAliases'; + +/** + * Options for RemoteNaturalExecutionTools + */ +export interface RemoteNaturalExecutionToolsOptions extends CommonExecutionToolsOptions { + /** + * URL of the remote PTP server + * On this server will be connected to the socket.io server + */ + readonly remoteUrl: URL; + + /** + * Path for the Socket.io server to listen + * + * @default '/socket.io' + * @example '/promptbook/socket.io' + */ + readonly path: string_uri; + + /** + * Your client ID + */ + readonly clientId: uuid; +} diff --git a/src/ai/text-to-image/remote/runRemoteImageGeneratorServer.ts b/src/ai/text-to-image/remote/runRemoteImageGeneratorServer.ts new file mode 100644 index 0000000000..23adfeba9e --- /dev/null +++ b/src/ai/text-to-image/remote/runRemoteImageGeneratorServer.ts @@ -0,0 +1,100 @@ +import chalk from 'chalk'; +import http from 'http'; +import { Server, Socket } from 'socket.io'; +import spaceTrim from 'spacetrim'; +import type { CreateRemoteImageGeneratorServerOptions } from './interfaces/CreateRemoteImageGeneratorServerOptions'; +import type { Imgs_Error } from './interfaces/Imgs_Error'; +import type { Imgs_Request } from './interfaces/Imgs_Request'; +import type { Imgs_Response } from './interfaces/Imgs_Response'; + +/** + * Remote server is a proxy server that remotelly generates images + * + * You can simply use `RemoteImageGenerator` on client-side javascript and connect to your remote server. + * This is useful to make all logic on browser side but not expose your API keys or no need to use customer's GPU. + */ +export function runRemoteImageGeneratorServer(options: CreateRemoteImageGeneratorServerOptions) { + const { port, path, createImageGenerator, isVerbose } = options; + + const httpServer = http.createServer({}, (request, response) => { + if (request.url?.includes('socket.io')) { + return; + } + + response.write( + spaceTrim(` + Server for processing ImageGenerator requests is running + + For more information look at: + https://github.com/webgptorg/promptbook + + `), + ); + response.end(); + }); + + const server: Server = new Server(httpServer, { + path, + transports: [/*'websocket', <- TODO: [🌬] Make websocket transport work */ 'polling'], + cors: { + origin: '*', + methods: ['GET', 'POST'], + }, + }); + + server.on('connection', (socket: Socket) => { + console.log(chalk.gray(`Client connected`), socket.id); + + socket.on('request', async (request: Imgs_Request) => { + const { prompt, clientId } = request; + // TODO: !! Validate here clientId (pass validator as dependency) + + if (isVerbose) { + console.info(chalk.bgGray(`Prompt:`), chalk.gray(JSON.stringify(request, null, 4))); + } + + try { + const imageGenerator = createImageGenerator(clientId); + const promptResult = await imageGenerator.generate(prompt, () => { + // TODO: !! Pass progress + }); + + if (isVerbose) { + console.info(chalk.bgGreen(`PromptResult:`), chalk.green(JSON.stringify(promptResult, null, 4))); + } + + socket.emit('response', { promptResult } satisfies Imgs_Response); + } catch (error) { + if (!(error instanceof Error)) { + throw error; + } + + socket.emit('error', { errorMessage: error.message } satisfies Imgs_Error); + } finally { + socket.disconnect(); + } + }); + + socket.on('disconnect', () => { + // TODO: Destroy here executionToolsForClient + if (isVerbose) { + console.info(chalk.gray(`Client disconnected`), socket.id); + } + }); + }); + + httpServer.listen(port); + + // Note: We want to log this also in non-verbose mode + console.info(chalk.bgGreen(`PTP server listening on port ${port}`)); + if (isVerbose) { + console.info(chalk.green(`Verbose mode is enabled`)); + } +} + +/** + * TODO: Handle progress - support streaming + * TODO: [🤹‍♂️] Do not hang up immediately but wait until client closes OR timeout + * TODO: [🤹‍♂️] Timeout on chat to free up resources + * TODO: [🃏] Pass here some security token to prevent DDoS + */ diff --git a/src/ai/text-to-text/ChatThread.ts b/src/ai/text-to-text/ChatThread.ts deleted file mode 100644 index 88efcd6409..0000000000 --- a/src/ai/text-to-text/ChatThread.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { getSupabaseForServer } from '../../utils/supabase/getSupabaseForServer'; -import { string_chat_prompt, string_model_name, uuid } from '../../utils/typeAliases'; -import { getOpenaiForServer } from './getOpenaiForServer'; - -/** - * Thread to the ChotGPT - * - * Note: This function is aviable only on the server - */ -export class ChatThread { - /** - * Starts a new ChatThread conversation - * - * @param request text to send to the OpenAI API - * @returns response from the OpenAI API wrapped in ChatThread - */ - public static async ask(request: string_chat_prompt, clientId: uuid /* <-[🌺] */): Promise { - return /* not await */ ChatThread.create(null, request, clientId); - } - - /** - * Makes a request to the OpenAI API and returns a response wrapped in ChatThread - * @private Utility method within the class ChatThread - */ - private static async create( - parentChatThread: null | ChatThread, - request: string_chat_prompt, - clientId: uuid /* <-[🌺] */, - ): Promise { - const mark = `ask-gpt-${parentChatThread ? parentChatThread.chatSize : 1}`; - - const promptAt = new Date(); - performance.mark(`${mark}-start`); - const model = 'gpt-3.5-turbo'; /* <- TODO: To global config */ - const modelSettings = { model }; - const completion = await getOpenaiForServer().chat.completions.create({ - ...modelSettings, - messages: [ - { - role: 'user', - content: request, - }, - ], - }); - performance.mark(`${mark}-end`); - const answerAt = new Date(); - // console.log(performance.measure(mark, `${mark}-start`, `${mark}-end`)); - - if (!completion.choices[0]) { - // [5] - throw new Error(`No choises from OpenAPI`); - } - - if (completion.choices.length > 1) { - // TODO: This should be maybe only warning - // [5] - throw new Error(`More than one choise from OpenAPI`); - } - - // Display response message to user - const response = completion.choices[0].message.content; - - if (!response) { - // [5] - throw new Error(`No response message from OpenAPI`); - } - - // Note: We do not want to wait for the insert to the database - /* not await */ getSupabaseForServer() - .from('Prompt') - .insert( - { - // Metadata - type: 'CHAT', - clientId, - metadata: { - /* TODO: Is metadata needed? */ - }, - - // Model - model, - modelSettings, - - // Prompt - prompt: request, - systemMessage: null, - // TODO: !!previousExternalId: parentChatThread ? parentChatThread. : null, - promptAt, - - // Response - answer: response, - externalId: null, - fullCompletion: completion, - answerAt, - - // <- TODO: [💹] There should be link to wallpaper site which is the prompt for (to analyze cost per wallpaper) - // <- TODO: [🎠] There should be a prompt template+template version+template language version (to A/B test performance of prompts) - } as any /* <- TODO: [🖍] It is working in runtime BUT for some strange reason it invokes typescript error */, - ) - .then((insertResult) => { - // TODO: !! Util isInsertSuccessfull - // console.log('ChatThread', { insertResult }); - }); - - return new ChatThread(clientId, parentChatThread, completion.model as string_model_name, request, response); - } - - private constructor( - public readonly clientId: uuid /* <-[🌺] */, - public readonly parent: null | ChatThread, - public readonly model: string_model_name, - public readonly request: string_chat_prompt, - public readonly response: string, - ) {} - - /** - * Continues in ChatThread conversation - * - * @param request text to send to the OpenAI API - * @returns response from the OpenAI API wrapped in ChatThread - */ - public async ask(request: string_chat_prompt): Promise { - return /* not await */ ChatThread.create(this, request, this.clientId); - } - - public get chatSize(): number { - return this.parent ? this.parent.chatSize + 1 : 1; - } -} - -/** - * TODO: [🚞] DRY ChatThread+completeWithGpt - * TODO: [🧠] Wording: response or answer? - * TODO: [5] Log also failed requests as in completeWithGpt - * TODO: Make IAskOptions - */ diff --git a/src/ai/text-to-text/completeWithGpt.ts b/src/ai/text-to-text/completeWithGpt.ts deleted file mode 100644 index 81c03df205..0000000000 --- a/src/ai/text-to-text/completeWithGpt.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { getSupabaseForServer } from '../../utils/supabase/getSupabaseForServer'; -import { string_completion_prompt, string_model_name, uuid } from '../../utils/typeAliases'; -import { getOpenaiForServer } from './getOpenaiForServer'; - -export interface ICompleteWithGptResult { - response: string; - model: string_model_name; -} - -/** - * Complete a prompt with GPT - * - * Note: This function is aviable only on the server - */ -export async function completeWithGpt( - prompt: string_completion_prompt, - clientId: uuid /* <-[🌺] */, -): Promise { - const model = 'text-davinci-003'; - const modelSettings = { - model, - max_tokens: 500, - // <- TODO: [🤡] Tweak, hardcode+note or put in config + Pick the best model, max_tokens, top_t,... other params - }; - const promptAt = new Date(); - - // Note: We do not want to wait for the insert to the database - const promptIdPromise = /* not await */ getSupabaseForServer() - .from('Prompt') - .insert( - { - // Metadata - type: 'COMPLETION', - clientId, - metadata: { - /* TODO: Is metadata needed? */ - }, - - // Model - model, - modelSettings, - - // Prompt - prompt, - systemMessage: null, - previousExternalId: null, - promptAt, - - // Response - answer: null, - externalId: null, - fullCompletion: null, - answerAt: null, - - // <- TODO: [💹] There should be link to wallpaper site which is the prompt for (to analyze cost per wallpaper) - // <- TODO: [🎠] There should be a prompt template+template version+template language version (to A/B test performance of prompts) - } as any /* <- TODO: [🖍] It is working in runtime BUT for some strange reason it invokes typescript error */, - ) - .select() - .then((insertSelectResult) => { - // TODO: !! Util isInsertSuccessfull / isInsertSelectSuccessfull which returns the id - // console.log('completeWithGpt', { insertSelectResult }); - - if (insertSelectResult.data === null) { - throw new Error('insertResult.data is null'); - } - - if (!insertSelectResult.data[0]) { - throw new Error('insertResult.data has no rows'); - } - - return insertSelectResult.data[0].id; - }); - - performance.mark('complete-gpt-start'); - const completion = await getOpenaiForServer().completions.create({ - ...modelSettings, - prompt, - }); - performance.mark('complete-gpt-end'); - const answerAt = new Date(); - // console.log(performance.measure('complete-gpt', 'complete-gpt-start', 'complete-gpt-end')); - - if (!completion.choices[0]) { - // [5] - throw new Error(`No choises from OpenAPI`); - } - - if (completion.choices.length > 1) { - // TODO: This should be maybe only warning - // [5] - throw new Error(`More than one choise from OpenAPI`); - } - - // Display response message to user - const response = completion.choices[0].text; - - // Note: We do not want to wait for the update in the database - /* not await */ promptIdPromise - .then((promptId) => { - // console.log({ promptId }); - return getSupabaseForServer() - .from('Prompt') - .update( - { - // Response - answer: response, - externalId: null, - fullCompletion: completion, - answerAt, - } as any /* <- TODO: [🖍] It is working in runtime BUT for some strange reason it invokes typescript error */, - ) - .eq('id', promptId); - }) - .then((updateResult) => { - // TODO: !! Util isUpdateSuccessfull - // console.log('completeWithGpt', { updateResult }); - }); - - return { - response, - model: completion.model as string_model_name, - }; -} - -/** - * TODO: (Probbably no) Are there failed requests - analyze them - * Make some statistics for PromptTemeplates - * TODO: DRY ChatThread+completeWithGpt - * TODO: [🧠] Wording: response or answer? - * TODO: [🧠][5] Log also failed requests - * TODO: Make ICompleteWithGptOptions - */ diff --git a/src/ai/text-to-text/getOpenaiForServer.ts b/src/ai/text-to-text/getOpenaiForServer.ts deleted file mode 100644 index 9046c72a83..0000000000 --- a/src/ai/text-to-text/getOpenaiForServer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import OpenAI from 'openai'; -import { OPENAI_API_KEY } from '../../../config'; -import { isRunningInNode } from '../../utils/isRunningInWhatever'; - -/** - * Internal cache for getOpenaiForServer - * @private - * @singleton - */ -let openai: OpenAI; - -/** - * Get OpenAI client - * - * Note: The client is cached, so it's safe to call this function multiple times - * Note: This function is available ONLY in server/node - * - * @returns instance of OpenAI client - */ -export function getOpenaiForServer(): OpenAI { - if (!isRunningInNode()) { - throw new Error('OpenAI is only available on the server'); - } - - if (!openai) { - openai = new OpenAI({ - apiKey: OPENAI_API_KEY!, - }); - } - - return openai; -} diff --git a/src/ai/text-to-text/prompt-templates/TODO.txt b/src/ai/text-to-text/prompt-templates/TODO.txt deleted file mode 100644 index 05ca2e3012..0000000000 --- a/src/ai/text-to-text/prompt-templates/TODO.txt +++ /dev/null @@ -1,2 +0,0 @@ -TODO: !! Prompt templates should be in .txt files in /promps folder -TODO: !! Record all prompt (template) performance to be able to A/B test them \ No newline at end of file diff --git a/src/ai/text-to-text/prompt-templates/createContentPromptTemplate.ts b/src/ai/text-to-text/prompt-templates/createContentPromptTemplate.ts deleted file mode 100644 index 232361ca92..0000000000 --- a/src/ai/text-to-text/prompt-templates/createContentPromptTemplate.ts +++ /dev/null @@ -1,38 +0,0 @@ -import spaceTrim from 'spacetrim'; -import { image_description, string_chat_prompt, string_midjourney_prompt } from '../../../utils/typeAliases'; - -/** - * Generates a template for creating web content based on a given wallpaper description - * - * @param wallpaperDescription: A description of the wallpaper. This could be a plain description of the image or a prompt created from Azure's image cognition or MidJourney services. - * @returns A template that can be used with ChatGPT to generate a webpage content. - */ -export function createContentPromptTemplate( - wallpaperDescription: Exclude | string_midjourney_prompt, -): string_chat_prompt { - return spaceTrim( - (block) => - ` - Craft a webpage content which incorporates the following wallpaper description as an alt text: - - "${block(wallpaperDescription)}" - - Guidelines: - - The webpage title should not directly copy the alt text but should be creatively derived from it. - - Utilize markdown format. - - Begin with a concise heading. - - Aim for content that realistically portrays a functioning website, not a mere display of the wallpaper. - - The heading should not include words like "wallpaper" or "background". - - The content should feature real sections such as references, contact information, user stories, etc., as per the objective of the page. - - Structure the content with headings, bullets, numbering, blockquotes, paragraphs, horizontal lines, etc. - - Feel free to use bold or _italic_ text for emphasis. - - Incorporate UTF-8 emojis for added appeal. - - Links should be only #hash anchors referring to the document itself. - - Avoid including any images. - `, - ); -} - -/** - * TODO: [🤡] Make some model comparision - */ diff --git a/src/ai/text-to-text/prompt-templates/createFontPromptTemplate.ts b/src/ai/text-to-text/prompt-templates/createFontPromptTemplate.ts deleted file mode 100644 index 893e50458a..0000000000 --- a/src/ai/text-to-text/prompt-templates/createFontPromptTemplate.ts +++ /dev/null @@ -1,32 +0,0 @@ -import spaceTrim from 'spacetrim'; -import { FONTS } from '../../../../config'; -import { string_chat_prompt } from '../../../utils/typeAliases'; - -/** - * Generates a template for figuring out best fitting font for the website. - * - * Note: This should be a second message in the conversation after the createTitlePromptTemplate - * - * @returns A template that can be used with ChatGPT to detect best fitting font for the website. - */ -export function createFontPromptTemplate(): string_chat_prompt { - return spaceTrim( - (block) => - ` - Write me a Google font which is best fitting for the website. - - Pick from the list: - ${block( - [...FONTS] - .sort(() => Math.random() - 0.5) - .map((fontName) => `- ${fontName}`) - .join('\n'), - )} - - - Write just the font name nothing else. - - - `, - ); -} diff --git a/src/ai/text-to-text/prompt-templates/createTitlePromptTemplate.ts b/src/ai/text-to-text/prompt-templates/createTitlePromptTemplate.ts deleted file mode 100644 index 48255b2d04..0000000000 --- a/src/ai/text-to-text/prompt-templates/createTitlePromptTemplate.ts +++ /dev/null @@ -1,30 +0,0 @@ -import spaceTrim from 'spacetrim'; -import { image_description, string_chat_prompt, string_midjourney_prompt } from '../../../utils/typeAliases'; - -/** - * Generates a template for creating web title based on a given wallpaper description - * - * @param wallpaperAssigment: A description of the wallpaper. This could be a plain description of the image or a prompt created from Azure's image cognition or MidJourney services. - * @returns A title of the web - */ -export function createTitlePromptTemplate( - wallpaperAssigment: Exclude | string_midjourney_prompt, -): string_chat_prompt { - return spaceTrim( - (block) => - ` - Craft a title for webpage which incorporates the following wallpaper description as an alt text: - - "${block(wallpaperAssigment)}" - - Guidelines: - - This is a title for real website - - Be short and concise - - The title should not include parasitic words like "wallpaper" or "background". - `, - ); -} - -/** - * TODO: [🤡] Make some model comparision - */ diff --git a/src/ai/text-to-text/writeWallpaperContent.ts b/src/ai/text-to-text/writeWallpaperContent.ts deleted file mode 100644 index 3b03f40b3f..0000000000 --- a/src/ai/text-to-text/writeWallpaperContent.ts +++ /dev/null @@ -1,168 +0,0 @@ -import spaceTrim from 'spacetrim'; -import { FONTS } from '../../../config'; -import { parseTitleAndTopic } from '../../utils/content/parseTitleAndTopic'; -import { removeQuotes } from '../../utils/content/removeQuotes'; -import { randomItem } from '../../utils/randomItem'; -import { description, string_markdown, string_name, string_url, title, uuid } from '../../utils/typeAliases'; -import { ChatThread } from './ChatThread'; -import { completeWithGpt } from './completeWithGpt'; -import { createTitlePromptTemplate } from './prompt-templates/createTitlePromptTemplate'; - -export interface WriteWallpaperContentOptions { - /** - * Client ID to validate the request - */ - clientId: uuid /* <-[🌺] */; - - /** - * Title of the wallpaper - * - * If set, the generated content will start with this title - * If null, it will be written by AI - */ - title: Exclude | null; - - /** - * Assigment of the wallpaper - * - * It is the detailed description of the wallpaper, please include information like: - * - What is the page about - * - What is the goal of the page - * - What is the user supposed to do on the page - * - * Note: There are two simmilar propertie: - * - `description` which describes content of the image - * - `assigment` which describes requirements for the page - */ - assigment: Exclude | null; - - /** - * Additional sections to be added to the content - */ - addSections: Array<{ - /** - * Unique name of the section - * Note: It is used for example as element ID to lead anchor links to this section - */ - name: string_name; - - /** - * Title of the section - */ - title: Exclude; - - /** - * Order of the section - * TODO: [🧠] Some transparent system to order sections - */ - order: number; - - /** - * Content of the section - */ - content: string_markdown; - - // <- TODO: !! [🧠] Maybe allow to have empty name+title+content just write assigment and auto generate - }>; - - /** - * Links to be added to the content - */ - links: Array<{ - /** - * Title of the link - it is used as link text and also as title attribute - */ - title: Exclude; - - /** - * URL of the link - */ - url: string_url; - }>; -} - -/** - * Writes the rich content of the wallpaper page - * - * Note: This function is aviable only on the server - * - * @param wallpaperAssigment as a plain description what is on the wallpaper (created for expample from imageToText or midjourney prompt) - * @returns Content of the wallpaper page - */ -export async function writeWallpaperContent(options: WriteWallpaperContentOptions): Promise { - const { clientId, assigment, addSections, links } = options; - let { title } = options; - - let contentStart: string_markdown = ''; - - if (title !== null) { - contentStart = spaceTrim( - (block) => ` - - # ${block(title!)} - - - `, - ); - } else { - if (!assigment) { - throw new Error('Either title or assigment must be provided'); - } - const prompt = createTitlePromptTemplate(assigment); - const chatThread = await ChatThread.ask(prompt, clientId); - const { response } = chatThread; - const { title, topic } = parseTitleAndTopic(removeQuotes(response)); - - contentStart = spaceTrim( - (block) => ` - - # ${block(title)} - ${block(!topic ? `` : `\n\n> ${topic}\n\n`)} - - `, - ); - } - - // TODO: !!! Use here addSections and links - - const { response: contentMiddle, model: modelToCreateContent } = await completeWithGpt( - spaceTrim( - // TODO: [🤡] This prompt should be also created in some template function - // TODO: [🤡] Pefect this prompt - (block) => ` - - Following is markdown content of a webpage: - - ${block(contentStart)} - - `, - ), - clientId, - ); - - /* - TODO: !!! Better - const chatThreadFont = await chatThread.ask(createFontPromptTemplate()); - const font = removeQuotes(chatThreadFont.response) as string_font_family; - */ - - const font = randomItem(...FONTS); - - return spaceTrim( - (block) => ` - - - - ${block(contentStart)} - ${block(contentMiddle)} - - `, - ); -} - -/** - * TODO: !! Put step by step instructions how the content is generated in footer comment - * TODO: [👸] Use in generate-wallpapers-content and DRY - * TODO: [👮‍♀️] In this repository is used both 'chatgpt' and 'openai' NPM packages - use just 'openai' in future and in scripts use the common utils - * TODO: Make IWriteWallpaperContentOptions - */ diff --git a/src/components/AiComponents/AiComponentsRoot.tsx b/src/components/AiComponents/AiComponentsRoot.tsx index 6b40ebe528..769d92063d 100644 --- a/src/components/AiComponents/AiComponentsRoot.tsx +++ b/src/components/AiComponents/AiComponentsRoot.tsx @@ -26,6 +26,8 @@ interface AiComponentsRootProps { /** * Renders a root element for AI components and activates them + * + * @deprecated [👨‍🦲] AI Components are deprecated, use custom html components instead */ export function AiComponentsRoot(props: AiComponentsRootProps) { const { usedComponents, children, className } = props; diff --git a/src/components/AiComponents/README.md b/src/components/AiComponents/README.md index 3bb1c4859f..7b2cdd4506 100644 --- a/src/components/AiComponents/README.md +++ b/src/components/AiComponents/README.md @@ -4,4 +4,4 @@ Theese are components that are used in dynamic next page and also rendered into ## TODOs -- [ ] TODO: Maybe use shadow dom not just CSS / data-aiai prefixing +- [👨‍🦲] TODO: Use shadow dom not just CSS / data-aiai prefixing diff --git a/src/components/AiComponents/TODO.txt b/src/components/AiComponents/TODO.txt new file mode 100644 index 0000000000..5cac252771 --- /dev/null +++ b/src/components/AiComponents/TODO.txt @@ -0,0 +1 @@ +TODO: [👨‍🦲] AI Components are deprecated, use custom html components instead \ No newline at end of file diff --git a/src/components/AiComponents/activateGalleryComponent.ts b/src/components/AiComponents/activateGalleryComponent.ts index 861cbc77dc..ce0a78bd5b 100644 --- a/src/components/AiComponents/activateGalleryComponent.ts +++ b/src/components/AiComponents/activateGalleryComponent.ts @@ -1,6 +1,10 @@ import type { LikedStatus } from '../../utils/hooks/useLikedStatusOfCurrentWallpaper'; import { string_color, string_wallpaper_id } from '../../utils/typeAliases'; + +/** + * @deprecated [👨‍🦲] AI Components are deprecated, use custom html components instead + */ export async function activateGalleryComponent(galleryElement: HTMLElement): Promise { const moreButtonHtml = ` More diff --git a/src/components/AiComponents/activateMenuComponent.ts b/src/components/AiComponents/activateMenuComponent.ts index 57edbb5c27..abdb6ec0d3 100644 --- a/src/components/AiComponents/activateMenuComponent.ts +++ b/src/components/AiComponents/activateMenuComponent.ts @@ -1,3 +1,7 @@ + +/** + * @deprecated [👨‍🦲] AI Components are deprecated, use custom html components instead + */ export function activateMenuComponent(menuElement: HTMLElement): void { const barElement = menuElement.querySelector('[data-ai-element="bar"]'); diff --git a/src/components/AiComponents/ai-components.css b/src/components/AiComponents/ai-components.css index e237001845..91c5a700cd 100644 --- a/src/components/AiComponents/ai-components.css +++ b/src/components/AiComponents/ai-components.css @@ -1,3 +1,7 @@ +/* +TODO: [👨‍🦲] AI Components are deprecated, use custom html components instead +*/ + /* 📱 Computers */ .ai-gallery { --on-row: 6; diff --git a/src/components/Aigen/Aigen.tsx b/src/components/Aigen/Aigen.tsx index e801dfe51d..04f8e4be8c 100644 --- a/src/components/Aigen/Aigen.tsx +++ b/src/components/Aigen/Aigen.tsx @@ -141,6 +141,7 @@ export function Aigen() { } /** + * TODO: [🧠][♒] Watermark image * TODO: [🧠] Test / think about / ask how to properly mark AI generated webpages * TODO: Maybe as external image * TODO: alt="← Generated by AI" diff --git a/src/components/Aigen/AigenSimple.tsx b/src/components/Aigen/AigenSimple.tsx index d3f6f44517..ee570bde74 100644 --- a/src/components/Aigen/AigenSimple.tsx +++ b/src/components/Aigen/AigenSimple.tsx @@ -1,4 +1,3 @@ -import { useRouter } from 'next/router'; import { WallpaperLink } from '../WallpaperLink/WallpaperLink'; import styles from './AigenSimple.module.css'; @@ -12,3 +11,7 @@ export function AigenSimple() { ); } + +/** + * TODO: [🧠][♒] Watermark image + */ diff --git a/src/components/AppHead/WallpaperAppHead.tsx b/src/components/AppHead/WallpaperAppHead.tsx index 3244f726a7..0ffda91eb0 100644 --- a/src/components/AppHead/WallpaperAppHead.tsx +++ b/src/components/AppHead/WallpaperAppHead.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router'; import { ReactNode, useContext } from 'react'; import { NEXT_PUBLIC_URL } from '../../../config'; import { AnalyticsAndIntegrations } from '../../components/AnalyticsAndIntegrations/AnalyticsAndIntegrations'; -import { extractDescriptionFromHtml } from '../../utils/content/extractDescriptionFromHtml'; +import { extractDescriptionFromContent } from '../../utils/content/extractDescriptionFromContent'; import { ExportContext } from '../../utils/hooks/ExportContext'; import { useCurrentWallpaper } from '../../utils/hooks/useCurrentWallpaper'; import { ExportCommentedBlock } from '../ExportComment/ExportCommentedBlock'; @@ -28,10 +28,12 @@ export function WallpaperAppHead(props: WallpaperAppHeadProps) { const title = wallpaper.title; /* <- TODO: !! Apply here (some) font as UTF-8 special chars */ const description = - extractDescriptionFromHtml(wallpaper.content) /* <- !! Shorten a description with GPT */ || + (extractDescriptionFromContent(wallpaper.content) as string) /* <- !! Shorten a description with GPT */ || 'The page was created by webgpt.cz'; - const homeUrl = `${publicUrl.href}${wallpaper.id}`; /* <- TODO: Self URL into some configuration */ + const homeUrl = isExported + ? publicUrl.href + : `${publicUrl.href}${wallpaper.id}`; /* <- TODO: Self URL into some configuration */ const socialImageUrl = wallpaper.src; diff --git a/src/components/CodeEditor/CodeEditor.module.css b/src/components/CodeEditor/CodeEditor.module.css new file mode 100644 index 0000000000..5991b6c14b --- /dev/null +++ b/src/components/CodeEditor/CodeEditor.module.css @@ -0,0 +1,3 @@ +.fallback { + background-color: #1e1e1e; +} diff --git a/src/components/CodeEditor/CodeEditor.tsx b/src/components/CodeEditor/CodeEditor.tsx new file mode 100644 index 0000000000..b63a3732fe --- /dev/null +++ b/src/components/CodeEditor/CodeEditor.tsx @@ -0,0 +1,83 @@ +import MonacoEditor from '@monaco-editor/react'; +import { classNames } from '../../utils/classNames'; +import { useTouchDeviceDetection } from '../../utils/hooks/useTouchDeviceDetection'; +import { string_css_class, string_script } from '../../utils/typeAliases'; +import styles from './CodeEditor.module.css'; + +interface CodeEditorProps { + /** + * The code + */ + defaultValue: string_script; + + /** + * If true, the editor is read-only + */ + isReadOnly?: true; + + /** + * The code + */ + onChange(newCode: string_script): void; + + /** + * Optional CSS class name which will be added to root element + */ + className?: string_css_class; +} + +/** + * Renders a Monaco editor OR simple + + + + ); +} + +/** + * TODO: [🧠] Should be the props readonly (for all react components)? + */ diff --git a/src/components/CompletionTextarea/Story.tsx b/src/components/CompletionTextarea/Story.tsx new file mode 100644 index 0000000000..eb5095c97b --- /dev/null +++ b/src/components/CompletionTextarea/Story.tsx @@ -0,0 +1,38 @@ +import { IS_VERIFIED_EMAIL_REQUIRED } from '../../../config'; +import { getExecutionTools } from '../../ai/prompt-templates/getExecutionTools'; +import { CompletionTextarea } from '../../components/CompletionTextarea/CompletionTextarea'; +import { useClientId } from '../../utils/hooks/useClientId'; +import { useSsrDetection } from '../../utils/hooks/useSsrDetection'; +import { useStateInLocalstorage } from '../../utils/hooks/useStateInLocalstorage'; +import { NoSsr } from '../NoSsr/NoSsr'; + +/** + * Renders a auto-completion story + */ +export function Story() { + const clientId = useClientId({ + isVerifiedEmailRequired: IS_VERIFIED_EMAIL_REQUIRED.EDIT, + }); + + const [story, setStory] = useStateInLocalstorage( + 'ai-sovicka-story', + 'Bylo nebylo, za devatero horami a devatero řekami', + ); + + if ( clientId === null) { + return <>; + } + + return ( + + { + console.log({ story }); + setStory(story); + }} + naturalExecutionTools={getExecutionTools(clientId).natural} + > + {story} + + ); +} diff --git a/src/components/MarkdownContent/Content.tsx b/src/components/Content/Content.tsx similarity index 94% rename from src/components/MarkdownContent/Content.tsx rename to src/components/Content/Content.tsx index 4fc8d83f2b..b53a6848c8 100644 --- a/src/components/MarkdownContent/Content.tsx +++ b/src/components/Content/Content.tsx @@ -57,6 +57,9 @@ interface ContentProps { /** * Renders given html or markdown content with optional enhancements and optional editability * + * Note: This component renders either or based on the content format + * If you want to render use it directly + * * @param {IArticleProps} props - The props for the component * @returns {JSX.Element} - The JSX element for the article */ diff --git a/src/components/MarkdownContent/HtmlContent.tsx b/src/components/Content/HtmlContent.tsx similarity index 80% rename from src/components/MarkdownContent/HtmlContent.tsx rename to src/components/Content/HtmlContent.tsx index 99a465874e..f59e0a3c67 100644 --- a/src/components/MarkdownContent/HtmlContent.tsx +++ b/src/components/Content/HtmlContent.tsx @@ -61,11 +61,7 @@ export function HtmlContent(props: HtmlContentProps) { ); } - return ( - <> - - - ); + return ; } /** @@ -85,9 +81,22 @@ function HtmlContentEditable(props: Omit) { return; } - if (element.innerHTML !== content) { + if ( + element.dataset.contentState === 'react-render' || + element !== document.activeElement + // __________________________ <- TODO: !!! [🧠] Also fill content when navigating back to page with content + ) { element.innerHTML = content /* <- Here [3] */; + element.dataset.contentState = 'filled'; + } + + /* + TODO: [🧠] Here shuld be some inteligent react-like virtual dom diffing to avoid re-rendering when content is not changed + BUT applying all the external changes to the content + if (element.innerHTML !== content) { + element.innerHTML = content ; } + */ }, [content]); useEffect(() => { const element = elementRef.current; @@ -112,7 +121,7 @@ function HtmlContentEditable(props: Omit) { }, [content, onHtmlChange, elementRef]); return ( -
+
This will be never shown because it is immediatelly replaced here [3] in useLayoutEffect
); @@ -123,4 +132,5 @@ function HtmlContentEditable(props: Omit) { * TODO: [🧠][💬] Allow to change fonts and do rich text editing * TODO: [👩‍🦰] Allow to change fonts in or or * TODO: [👨‍🦰] Show editable hint in or or (<- ) + * TODO: [🕶] Is `element !== document.activeElement` good enough? Isnt document.activeElement sometimes child of element? */ diff --git a/src/components/MarkdownContent/MarkdownContent.tsx b/src/components/Content/MarkdownContent.tsx similarity index 89% rename from src/components/MarkdownContent/MarkdownContent.tsx rename to src/components/Content/MarkdownContent.tsx index ead7166966..df821b7d2f 100644 --- a/src/components/MarkdownContent/MarkdownContent.tsx +++ b/src/components/Content/MarkdownContent.tsx @@ -5,12 +5,11 @@ import { string_css_class, string_href, string_markdown } from '../../utils/type import { HtmlContent } from './HtmlContent'; import { markdownConverter } from './markdownConverter'; - interface MarkdownContentProps { /** * Source markdown */ - content: string; + content: string_markdown; /** * Optional CSS class name which will be added to root element @@ -21,44 +20,37 @@ interface MarkdownContentProps { * Are tags detected and applied * * Note: When you use this you need to include the fonts into the page for example by using component + * @deprecated Use if you want to use fonts */ isusingFonts?: boolean; - /* - TODO: [0] This is automatically done by showdown - /** - * Make for each heading in markdown unique id and scroll to hash - * / - isHashUsed?: boolean; - */ - /** * Is enhanced by using openmoji + * + * @deprecated Use if you want to enhance the content */ isUsingOpenmoji?: boolean; /** * Is enhanced by adding links, normalize dashes and emojify + * + * @deprecated Use if you want to enhance the content */ isEnhanced?: boolean; /** * Is editable by user + * + * @deprecated Use if you want to edit the content */ isEditable?: boolean; /** * If set, all will be mapped by this function - */ - mapLinks?(oldHref: string_href): string_href; - - /** - * Callback when content is changed - * returns back converted markdown * - * Note: This is used only when isEditable is true + * @deprecated Use if you want to enhance the content */ - onMarkdownChange?: (content: string_markdown) => void; + mapLinks?(oldHref: string_href): string_href; /** * Callback when content is changed @@ -72,6 +64,10 @@ interface MarkdownContentProps { /** * Renders given markdown content with optional enhancements and optional editability * + * Note: There are two similar components: + * - which renders general markdown content with some enhancements without markdown-markdown editability + * - which renders specific flavor of markdown content for WebGPT with markdown-markdown editability + * * @param {IArticleProps} props - The props for the component * @returns {JSX.Element} - The JSX element for the article */ @@ -84,7 +80,6 @@ export function MarkdownContent(props: MarkdownContentProps) { isEnhanced, isEditable, mapLinks, - onMarkdownChange, onHtmlChange, } = props; @@ -129,7 +124,6 @@ export function MarkdownContent(props: MarkdownContentProps) { if (isusingFonts) { html = html.replace( - // TODO: [🔤] DRY //g, // Note: [💅] Originally here was '$1' but it was changed just to $1 (unquoted) @@ -163,11 +157,6 @@ export function MarkdownContent(props: MarkdownContentProps) { if (onHtmlChange) { onHtmlChange(htmlContent); } - - if (onMarkdownChange) { - const markdownContent = markdownConverter.makeMarkdown(htmlContent); - onMarkdownChange(markdownContent); - } }} /* diff --git a/src/components/Content/Maxdown/MaxdownContent.tsx b/src/components/Content/Maxdown/MaxdownContent.tsx new file mode 100644 index 0000000000..9fd6f9f03e --- /dev/null +++ b/src/components/Content/Maxdown/MaxdownContent.tsx @@ -0,0 +1,66 @@ +import { string_css_class, string_maxdown } from '../../../utils/typeAliases'; +import { HtmlContent } from '../HtmlContent'; +import { htmlToMaxdown } from './htmlToMaxdown'; +import { maxdownToHtml } from './maxdownToHtml'; + +interface MaxdownContentProps { + /** + * Source maxdown + */ + content: string_maxdown; + + /** + * Optional CSS class name which will be added to root element + */ + className?: string_css_class; + + /** + * Is editable by user + */ + isEditable?: boolean; + + /** + * Callback when content is changed + * returns back converted maxdown + * + * Note: This is used only when isEditable is true + */ + onMaxdownChange?: (content: string_maxdown) => void; +} + +/** + * Renders given wallpaper maxdown content with optional enhancements and optional editability + * + * Note: There are two similar components: + * - which renders general markdown content with some enhancements without markdown-markdown editability + * - which renders specific flavor of markdown content for WebGPT with markdown-markdown editability + * + * @param {IArticleProps} props - The props for the component + * @returns {JSX.Element} - The JSX element for the article + */ +export function MaxdownContent(props: MaxdownContentProps) { + const { content, className, isEditable, onMaxdownChange } = props; + + const htmlContent = maxdownToHtml(content); + + return ( + { + if (!isEditable) { + return; + } + + if (onMaxdownChange) { + const maxdownContent = htmlToMaxdown(htmlContent); + + onMaxdownChange(maxdownContent); + } + }} + /> + ); +} + +/** + * TODO: Add emojis to maxdown + */ diff --git a/src/components/Content/Maxdown/htmlToMaxdown.test.ts b/src/components/Content/Maxdown/htmlToMaxdown.test.ts new file mode 100644 index 0000000000..923d016b44 --- /dev/null +++ b/src/components/Content/Maxdown/htmlToMaxdown.test.ts @@ -0,0 +1,219 @@ +import { describe, expect, it } from '@jest/globals'; +import spaceTrim from 'spacetrim'; +import { just } from '../../../utils/just'; +import { htmlToMaxdown } from './htmlToMaxdown'; + +describe(`conversion from html to maxdown`, () => { + it(`should convert simple html`, () => { + expect( + htmlToMaxdown( + spaceTrim(` +

Some text

+ + `), + ), + ).toBe( + just( + spaceTrim(` + Some text + `) + '\n', + ), + ); + }); + + it(`should convert maxdown with one font`, () => { + expect( + htmlToMaxdown( + spaceTrim(` +
+

Title

+

Some text

+
+ + `), + ), + ).toBe( + just( + spaceTrim(` + + + # Title + + Some text + `) + '\n', + ), + ); + }); + + it(`should convert maxdown with multiple fonts`, () => { + expect( + htmlToMaxdown( + spaceTrim(` +
+

Title

+

Some text

+
+
+

Title

+

Some text

+
+ + `), + ), + ).toBe( + just( + spaceTrim(` + + + # Title + + Some text + + + + # Title + + Some text + `) + '\n', + ), + ); + }); + + it(`should convert maxdown onelined with font`, () => { + expect( + htmlToMaxdown( + `

Title

Some text

`, + ), + ).toBe( + just( + spaceTrim(` + + + # Title + + Some text + `) + '\n', + ), + ); + }); + + it(`should preserve pretty formatting`, () => { + expect( + htmlToMaxdown( + spaceTrim(` +

+ + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + +

+ `), + ), + ).toBe( + just( + spaceTrim(` + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + `) + '\n', + ), + ); + }); + + it(`should preserve rich pretty formatting`, () => { + expect( + htmlToMaxdown( + spaceTrim(` +

Title

+

Some text

+

+ + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + +

+ `), + ), + ).toBe( + just( + spaceTrim(` + # Title + + Some text + + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + `) + '\n', + ), + ); + }); + + // Note: No need to test more complex cases because they are tested in maxdownNormalization.test.ts +}); diff --git a/src/components/Content/Maxdown/htmlToMaxdown.ts b/src/components/Content/Maxdown/htmlToMaxdown.ts new file mode 100644 index 0000000000..938400bf6b --- /dev/null +++ b/src/components/Content/Maxdown/htmlToMaxdown.ts @@ -0,0 +1,94 @@ +import spaceTrim from 'spacetrim'; +import { prettifyHtml } from '../../../export/utils/prettifyHtml'; +import type { string_html, string_maxdown } from '../../../utils/typeAliases'; +import { markdownConverter } from '../markdownConverter'; +import { validateMaxdown } from './validateMaxdown'; + +/** + * Parses edited HTML content into maxdown + * It is useful for editing in WYSIWYG style + * + * @param htmlContent the HTML content to parse + * @returns the pretty maxdown content + */ +export function htmlToMaxdown(htmlContent: string_html): string_maxdown { + htmlContent = spaceTrim(htmlContent || '' /* <- TODO: [👧 */); + + if (!htmlContent.startsWith('${htmlContent}
`; + } + + const containerElement = document.createElement('div'); + containerElement.innerHTML = htmlContent; + + let markdownContent = ''; + + for (const childNode of Array.from(containerElement.childNodes)) { + if (childNode instanceof HTMLElement) { + let font = childNode.style.fontFamily; + + if (font) { + font = font.split(',')[0]!.trim(); + + if (markdownContent !== '') { + markdownContent += '\n'; + } + + markdownContent += `\n\n`; + } + + let nodeHtml = childNode.innerHTML; + let nodeMarkdown = markdownConverter.makeMarkdown(nodeHtml); + + nodeMarkdown = nodeMarkdown + .split('\n') + .map((line) => { + if (line.startsWith('<') && line.endsWith('>')) { + // <- TODO: Better detection of HTML content in maxdown + return prettifyHtml(line); + } + + return line; + }) + .join('\n'); + + if (nodeMarkdown.endsWith('\n\n')) { + nodeMarkdown = nodeMarkdown.slice(0, -1); + } + + markdownContent += nodeMarkdown; + } else if (childNode instanceof Text) { + if (spaceTrim(childNode.textContent || '') !== '') { + throw new Error( + spaceTrim( + (block) => ` + Only HTML elements are allowed on top level + + Found non-empty text node + Content: ${block(childNode.textContent!)} + `, + ), + ); + } + //markdownContent += childNode.textContent!; + } else { + throw new Error( + spaceTrim( + (block) => ` + Only HTML elements are allowed on top level + + Found nodeName ${block(childNode.nodeName)} + Found nodeType ${block(childNode.nodeType.toString())} + @see https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + `, + ), + ); + } + } + + if (markdownContent.endsWith('\n\n')) { + markdownContent = markdownContent.slice(0, -1); + } + + return validateMaxdown(markdownContent); +} diff --git a/src/components/Content/Maxdown/maxdownNormalization.test.ts b/src/components/Content/Maxdown/maxdownNormalization.test.ts new file mode 100644 index 0000000000..a2bebba200 --- /dev/null +++ b/src/components/Content/Maxdown/maxdownNormalization.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it } from '@jest/globals'; +import { readdirSync, readFileSync, writeFileSync } from 'fs'; +import { join } from 'path'; +import { htmlToMaxdown } from './htmlToMaxdown'; +import { maxdownToHtml } from './maxdownToHtml'; +import { validateMaxdown } from './validateMaxdown'; + +describe(`normalization of maxdowns`, () => { + const markdowns = readdirSync(join(__dirname, 'samples'), { withFileTypes: true }) + // <- Note: In production it is not good practice to use synchronous functions + // But this is only a test before the build, so it is okay + .filter(({ name }) => name.endsWith('.md')) + .map(({ name }) => ({ name, maxdownContent: readFileSync(join(__dirname, 'samples', name), 'utf-8') })); + + for (const { name, maxdownContent } of markdowns) { + it(`should validate maxdown of ${name} sample`, () => { + expect(() => validateMaxdown(maxdownContent)).not.toThrowError; + }); + + it(`should converts to html and back with ${name} sample`, () => { + const htmlContent = maxdownToHtml(validateMaxdown(maxdownContent)); + + /*/ + //Note: It is useful to save the html for manual inspection + writeFileSync(join(__dirname, 'samples', name.split('.md').join('.html')), htmlContent, 'utf-8'); + /**/ + + const maxdownContentAgain = htmlToMaxdown(htmlContent); + + /*/ + //Note: It is useful to save normalized markdown for manual inspection + writeFileSync(join(__dirname, 'samples', name), maxdownContentAgain, 'utf-8'); + /**/ + + expect(maxdownContent).toBe(maxdownContentAgain); + }); + } +}); + +// Note: Preserve imports for the test +writeFileSync; diff --git a/src/components/Content/Maxdown/maxdownToHtml.test.ts b/src/components/Content/Maxdown/maxdownToHtml.test.ts new file mode 100644 index 0000000000..c02e8800f1 --- /dev/null +++ b/src/components/Content/Maxdown/maxdownToHtml.test.ts @@ -0,0 +1,222 @@ +import { describe, expect, it } from '@jest/globals'; +import spaceTrim from 'spacetrim'; +import { just } from '../../../utils/just'; +import { string_maxdown } from '../../../utils/typeAliases'; +import { maxdownToHtml } from './maxdownToHtml'; + +describe(`conversion from maxdown to html`, () => { + it(`should convert simple maxdown`, () => { + expect( + maxdownToHtml( + spaceTrim(` + Some text + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` +

Some text

+ `), + ), + ); + }); + + it(`should convert maxdown with structure`, () => { + expect( + maxdownToHtml( + spaceTrim(` + + # Title + + Some text + + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` + +

Title

+

Some text

+ + `), + ), + ); + }); + + it(`should convert maxdown with one font`, () => { + expect( + maxdownToHtml( + spaceTrim(` + + + # Title + + Some text + + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` +
+

Title

+

Some text

+
+ `), + ), + ); + }); + + it(`should convert maxdown with multiple fonts`, () => { + expect( + maxdownToHtml( + spaceTrim(` + + + # Title + + Some text + + + + Different text + + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` +
+

Title

+

Some text

+
+
+

Different text

+
+ `), + ), + ); + }); + + it(`should preserve pretty formatting`, () => { + expect( + maxdownToHtml( + spaceTrim(` + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` +

+ + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + +

+ `), + ), + ); + }); + + it(`should preserve rich pretty formatting`, () => { + expect( + maxdownToHtml( + spaceTrim(` + + # Title + + Some text + + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + `) as string_maxdown, + ), + ).toBe( + just( + spaceTrim(` +

Title

+

Some text

+

+ + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + +

+ `), + ), + ); + }); + + // Note: No need to test more complex cases because they are tested in maxdownNormalization.test.ts +}); diff --git a/src/components/Content/Maxdown/maxdownToHtml.ts b/src/components/Content/Maxdown/maxdownToHtml.ts new file mode 100644 index 0000000000..b14165adf2 --- /dev/null +++ b/src/components/Content/Maxdown/maxdownToHtml.ts @@ -0,0 +1,60 @@ +import spaceTrim from 'spacetrim'; +import { prettifyHtml } from '../../../export/utils/prettifyHtml'; +import type { string_html, string_maxdown } from '../../../utils/typeAliases'; +import { markdownConverter } from '../markdownConverter'; + +/** + * Converts maxdown to HTML which can be safely used in the page + * + * @param maxdownContent the maxdown content to convert + * @returns the HTML content + */ +export function maxdownToHtml(maxdownContent: string_maxdown): string_html { + maxdownContent = spaceTrim(maxdownContent || '' /* <- TODO: [👧 */) as string_maxdown; + + let html = markdownConverter.makeHtml(maxdownContent); + + // Note: Removing empty paragraphs + html = html.split(/

\s*<\/p>/g).join(''); + + // Note: Replacing font comments with divs + let isFontTagOpened = false; + const htmlLines: string_html[] = []; + for (let htmlLine of html.split('\n')) { + const fontMatch = htmlLine.match(//); + + if (!fontMatch) { + htmlLines.push((isFontTagOpened ? ' ' : '') + htmlLine); + } else { + if (isFontTagOpened) { + htmlLines.push(''); + } + + const font = fontMatch.groups?.font; + + // Note: [💅] Keeping font family unquoted + // There is some problem with escaping in export: + // -

+ htmlLines.push( + `
` /* <- TODO: Do not hardcode sans-serif */ /* <- [🎗] */, + ); + + isFontTagOpened = true; + } + } + if (isFontTagOpened) { + htmlLines.push('
'); + } + + html = htmlLines.join('\n'); + + html = prettifyHtml(html); + html = spaceTrim(html); + + return html; +} + +/** + * TODO: [🧠] Do here somewhere normalizeDashes + * TODO: [🧠] Do here somewhere linkMarkdown (but with dynamic list of what to link) + */ diff --git a/src/components/Content/Maxdown/samples/10-simple.md b/src/components/Content/Maxdown/samples/10-simple.md new file mode 100644 index 0000000000..905cb8b2cb --- /dev/null +++ b/src/components/Content/Maxdown/samples/10-simple.md @@ -0,0 +1,3 @@ +# Simple + +Test of simple markdown. diff --git a/src/components/Content/Maxdown/samples/20-wallpaper.md b/src/components/Content/Maxdown/samples/20-wallpaper.md new file mode 100644 index 0000000000..729429c29c --- /dev/null +++ b/src/components/Content/Maxdown/samples/20-wallpaper.md @@ -0,0 +1,21 @@ + + +# Komunikace v proměnách + +> Komunikace – spojení, které nás mění a proměňuje + +--- + +> Vývoj komunikace se neustále vyvíjí a ovlivňuje naše životy více, než si uvědomujeme. Moderní technologie nám umožňuje být ve spojení s ostatními neustále, ale zároveň nám může bránit v opravdovém porozumění a spolupráci. + +Komunikace je klíčovým prvkem našeho každodenního života a její význam v současném světě je nezastupitelný. Od pradávna se lidé snažili najít způsoby, jak si navzájem sdělovat své myšlenky, pocity a potřeby. Původní formy komunikace, jako například hlasová řeč a posunky, se postupem času vyvinuly do komplexnějších forem, jako jsou písmo, tisk, telefon nebo internet. + +Vývoj komunikace v průběhu času byl nutný pro zajištění stále se rozrůstajícího společenství a různorodých způsobů využití této schopnosti. Komunikace nám umožňuje sdílet informace, učit se od sebe, navazovat vztahy a spolupracovat. Díky tomu se náš svět stává stále více propojeným a globálním. + +Nicméně, moderní technologie, které jsou neodmyslitelnou součástí našeho každodenního života, vedou k mnoha proměnám a úskalím v oblasti komunikace. Zatímco jsou nám nástroji jako sociální sítě nebo mobilní telefony k dispozici pro okamžité připojení ke světu, častokrát nás odvádějí od skutečných interakcí s ostatními lidmi. Komunikace přes média neustále přináší nové výzvy, jako jsou manipulace nebo falšování informací, což může vést k nedorozuměním a konfliktům. + +Je ale důležité uvědomit si, že komunikace není pouze o sdílení informací, ale také o porozumění a spolupráci. Moderní technologie nám mohou tento proces umožňovat, pokud se dokážeme naučit je správně využívat. Jedna z možností je využití online nástrojů pro učení se jazyků a komunikaci s cizinci. Další možností je využití virtuálních schůzek pro zlepšení pracovního procesu a spolupráce týmu. + +V závěru našeho eseje se nabízí otázka, jak můžeme využít komunikaci pro lepší porozumění a spolupráci mezi námi. Prvním krokem je uvědomit si, že komunikace není pouze o elektronických médiích, ale také o osobní interakci. Dále můžeme využít různé nástroje pro zlepšení našich komunikačních dovedností, jako jsou kurzy a tréninky. A nakonec, najít rovnováhu mezi využíváním moderních technologií a skutečnými osobními interakcemi. + +Vývoj komunikace byl a stále bude významným tématem, který se týká každého z nás a ovlivňuje naše životy ve všech aspektech. Je důležité si uvědomit její význam v současném světě, ale také být kritičtí vůči jejím proměnám a aktivně se podílet na vytváření lepší komunikace mezi námi. diff --git a/src/components/Content/Maxdown/samples/30-multiple-fonts.md b/src/components/Content/Maxdown/samples/30-multiple-fonts.md new file mode 100644 index 0000000000..002156ad0f --- /dev/null +++ b/src/components/Content/Maxdown/samples/30-multiple-fonts.md @@ -0,0 +1,33 @@ + + +# Komunikace v proměnách + +> Komunikace – spojení, které nás mění a proměňuje + + + +> Vývoj komunikace se neustále vyvíjí a ovlivňuje naše životy více, než si uvědomujeme. Moderní technologie nám umožňuje být ve spojení s ostatními neustále, ale zároveň nám může bránit v opravdovém porozumění a spolupráci. + + + +Komunikace je klíčovým prvkem našeho každodenního života a její význam v současném světě je nezastupitelný. Od pradávna se lidé snažili najít způsoby, jak si navzájem sdělovat své myšlenky, pocity a potřeby. Původní formy komunikace, jako například hlasová řeč a posunky, se postupem času vyvinuly do komplexnějších forem, jako jsou písmo, tisk, telefon nebo internet. + + + +Vývoj komunikace v průběhu času byl nutný pro zajištění stále se rozrůstajícího společenství a různorodých způsobů využití této schopnosti. Komunikace nám umožňuje sdílet informace, učit se od sebe, navazovat vztahy a spolupracovat. Díky tomu se náš svět stává stále více propojeným a globálním. + + + +Nicméně, moderní technologie, které jsou neodmyslitelnou součástí našeho každodenního života, vedou k mnoha proměnám a úskalím v oblasti komunikace. Zatímco jsou nám nástroji jako sociální sítě nebo mobilní telefony k dispozici pro okamžité připojení ke světu, častokrát nás odvádějí od skutečných interakcí s ostatními lidmi. Komunikace přes média neustále přináší nové výzvy, jako jsou manipulace nebo falšování informací, což může vést k nedorozuměním a konfliktům. + + + +Je ale důležité uvědomit si, že komunikace není pouze o sdílení informací, ale také o porozumění a spolupráci. Moderní technologie nám mohou tento proces umožňovat, pokud se dokážeme naučit je správně využívat. Jedna z možností je využití online nástrojů pro učení se jazyků a komunikaci s cizinci. Další možností je využití virtuálních schůzek pro zlepšení pracovního procesu a spolupráce týmu. + + + +V závěru našeho eseje se nabízí otázka, jak můžeme využít komunikaci pro lepší porozumění a spolupráci mezi námi. Prvním krokem je uvědomit si, že komunikace není pouze o elektronických médiích, ale také o osobní interakci. Dále můžeme využít různé nástroje pro zlepšení našich komunikačních dovedností, jako jsou kurzy a tréninky. A nakonec, + + + +Vývoj komunikace byl a stále bude významným tématem, který se týká každého z nás a ovlivňuje naše životy ve všech aspektech. Je důležité si uvědomit její význam v současném světě, ale také být kritičtí vůči jejím proměnám a aktivně se podílet na vytváření lepší komunikace mezi námi. diff --git a/src/components/Content/Maxdown/samples/50-custom-components.md b/src/components/Content/Maxdown/samples/50-custom-components.md new file mode 100644 index 0000000000..28280b2314 --- /dev/null +++ b/src/components/Content/Maxdown/samples/50-custom-components.md @@ -0,0 +1,29 @@ +# Components + +## Button + +Buy + + +## Code + + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + + Feature 1 + Feature 2 + Feature 3 + Feature 4 + + diff --git a/src/components/Content/Maxdown/samples/50-html-components.md.todo b/src/components/Content/Maxdown/samples/50-html-components.md.todo new file mode 100644 index 0000000000..a586856eb1 --- /dev/null +++ b/src/components/Content/Maxdown/samples/50-html-components.md.todo @@ -0,0 +1,27 @@ + + +# Components + +## Button + +
Buy + +## Code + + + +```javascript +const a = 1; +``` + +## Image + +![Space](https://collboard.fra1.cdn.digitaloceanspaces.com/testaicontent/user/b/d/bd39149fe8267e48c9e7a1731c0f13b7c25f87e34ea236c7de941d8399e0f165) + +## Iframe + + diff --git a/src/components/Content/Maxdown/validateMaxdown.ts b/src/components/Content/Maxdown/validateMaxdown.ts new file mode 100644 index 0000000000..3135b7c1fe --- /dev/null +++ b/src/components/Content/Maxdown/validateMaxdown.ts @@ -0,0 +1,20 @@ +import { string_maxdown } from '../../../utils/typeAliases'; + +/** + * Validate maxdown content + * + * If content is not a valid maxdown, throws an error + * If content is a valid maxdown, + */ +export function validateMaxdown(content: unknown): string_maxdown { + if (typeof content !== 'string') { + throw new Error('Content is not a string'); + } + + return content as string_maxdown; +} + +/** + * TODO: !! Do here a real validation / sanitization + * TODO: [🧠][🚓] Is/which combination it better to use asserts/check, validate or is utility function? + */ diff --git a/src/components/MarkdownContent/mapLinksInHtml.test.ts b/src/components/Content/mapLinksInHtml.test.ts similarity index 100% rename from src/components/MarkdownContent/mapLinksInHtml.test.ts rename to src/components/Content/mapLinksInHtml.test.ts diff --git a/src/components/MarkdownContent/mapLinksInHtml.ts b/src/components/Content/mapLinksInHtml.ts similarity index 100% rename from src/components/MarkdownContent/mapLinksInHtml.ts rename to src/components/Content/mapLinksInHtml.ts diff --git a/src/components/MarkdownContent/markdownConverter.test.ts b/src/components/Content/markdownConverter.test.ts similarity index 100% rename from src/components/MarkdownContent/markdownConverter.test.ts rename to src/components/Content/markdownConverter.test.ts diff --git a/src/components/MarkdownContent/markdownConverter.ts b/src/components/Content/markdownConverter.ts similarity index 100% rename from src/components/MarkdownContent/markdownConverter.ts rename to src/components/Content/markdownConverter.ts diff --git a/src/components/MarkdownContent/useHash.ts b/src/components/Content/useHash.ts similarity index 100% rename from src/components/MarkdownContent/useHash.ts rename to src/components/Content/useHash.ts diff --git a/src/components/ControlPanel/ControlPanel.tsx b/src/components/ControlPanel/ControlPanel.tsx index 8c77100509..569380894e 100644 --- a/src/components/ControlPanel/ControlPanel.tsx +++ b/src/components/ControlPanel/ControlPanel.tsx @@ -25,7 +25,7 @@ export function ControlPanel() { return (
{/*
{wallpaperId}
*/}
@@ -97,7 +97,7 @@ export function ControlPanel() { )} {/* - Note: In the + TODO: [🧠] What is the best way how to navigate home? - {/* */} - {' '} + ); } diff --git a/src/components/ControlPanel/RandomWallpaper/RandomWallpaperManager.ts b/src/components/ControlPanel/RandomWallpaper/RandomWallpaperManager.ts index b813e716cc..57d4e68c1a 100644 --- a/src/components/ControlPanel/RandomWallpaper/RandomWallpaperManager.ts +++ b/src/components/ControlPanel/RandomWallpaper/RandomWallpaperManager.ts @@ -5,9 +5,12 @@ import type { RecommendWallpaperResponse } from '../../../pages/api/recommend-wa import { IWallpaperSerialized } from '../../../utils/IWallpaper'; import { randomItem } from '../../../utils/randomItem'; import { provideClientIdWithoutVerification } from '../../../utils/supabase/provideClientIdWithoutVerification'; -import { string_wallpaper_id } from '../../../utils/typeAliases'; +import { string_color } from '../../../utils/typeAliases'; export type IWallpaperInStorage = Pick; +export type IWallpaperInMockedApi = Pick & { + primaryColor: string_color; +}; /** * RandomWallpaperManager is a class that manages the random wallpapers which will be shown next. @@ -144,26 +147,24 @@ export class RandomWallpaperManager { return /* not await */ this.prefetchIfNeeded(); } - private welcomeWallpapers: null | Array<{ - id: string_wallpaper_id; - }> = null; + private welcomeWallpapers: null | Array = null; - public async getWelcomeWallpaper(): Promise> { + public async getWelcomeWallpapers(): Promise> { if (this.welcomeWallpapers === null) { const response = await fetch(`${NEXT_PUBLIC_URL.href}mocked-api/wallpapers-min-loved.json`); const { wallpapers } = (await response.json()) as { - wallpapers: Array<{ - id: string_wallpaper_id; - // [2] - // primaryColor: string_color; - // likedStatus: keyof typeof LikedStatus; - }>; + wallpapers: Array; }; this.welcomeWallpapers = wallpapers; } - // TODO: Do here a preloading when [2] there will be src in wallpapers-min-loved.json + // TODO: Do here a preloading when there will be src in wallpapers-min-loved.json // > await this.preloadRandomWallpaper(randomWallpaper); - return randomItem(...this.welcomeWallpapers); + return this.welcomeWallpapers; + } + + public async getWelcomeWallpaper(): Promise { + const welcomeWallpapers = await this.getWelcomeWallpapers(); + return randomItem(...welcomeWallpapers); } public async getRandomWallpaper(): Promise { diff --git a/src/components/CopilotInput/CopilotInput.tsx b/src/components/CopilotInput/CopilotInput.tsx index 252839c565..6021ab8660 100644 --- a/src/components/CopilotInput/CopilotInput.tsx +++ b/src/components/CopilotInput/CopilotInput.tsx @@ -1,18 +1,19 @@ +import type { string_prompt } from '@promptbook/types'; import Image from 'next/image'; import { useCallback, useRef, useState } from 'react'; import spaceTrim from 'spacetrim'; import { classNames } from '../../utils/classNames'; import { focusRef } from '../../utils/focusRef'; import { useRotatingPlaceholder } from '../../utils/hooks/useRotatingPlaceholder'; -import { string_prompt } from '../../utils/typeAliases'; -import { TorusInteractiveImage } from '../TaskInProgress/TorusInteractiveImage'; +import { message } from '../../utils/typeAliases'; +import { LoadingInteractiveImage } from '../TaskInProgress/LoadingInteractiveImage'; import styles from './CopilotInput.module.css'; interface useRouterProps { /** * Label for the input */ - label: string; + label: message; /** * The html comment to export @@ -42,9 +43,8 @@ export function CopilotInput(props: useRouterProps) { let prompt = inputRef.current?.value || ''; + setRunning(true); try { - setRunning(true); - // TODO: [🍛] Make same normalization as in the backend prompt = spaceTrim(prompt); @@ -66,7 +66,7 @@ export function CopilotInput(props: useRouterProps) { }, [inputRef, onPrompt, isRunning]); return ( -
+
) : ( - + )}
diff --git a/src/components/CopilotPanel/CopilotPanel.tsx b/src/components/CopilotPanel/CopilotPanel.tsx index d916f9814a..e6b25bda0e 100644 --- a/src/components/CopilotPanel/CopilotPanel.tsx +++ b/src/components/CopilotPanel/CopilotPanel.tsx @@ -1,38 +1,44 @@ +import type { string_prompt } from '@promptbook/types'; import Image from 'next/image'; +import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useMemo, useRef, useState } from 'react'; import spaceTrim from 'spacetrim'; import { COPILOT_PLACEHOLDERS, FONTS, IS_VERIFIED_EMAIL_REQUIRED } from '../../../config'; -import type { - UpdateWallpaperContentRequest, - UpdateWallpaperContentResponse, -} from '../../pages/api/update-wallpaper-content'; +import { getExecutionTools } from '../../ai/prompt-templates/getExecutionTools'; +import { webgptPtpLibrary } from '../../ai/prompt-templates/webgptPtpLibrary'; import { classNames } from '../../utils/classNames'; import { computeWallpaperUriid } from '../../utils/computeWallpaperUriid'; +import { removeContentComments } from '../../utils/content/removeContentComments'; import { focusRef } from '../../utils/focusRef'; import { useCurrentWallpaper } from '../../utils/hooks/useCurrentWallpaper'; import type { LikedStatus } from '../../utils/hooks/useLikedStatusOfCurrentWallpaper'; +import { useLocale } from '../../utils/hooks/useLocale'; import { useRotatingPlaceholder } from '../../utils/hooks/useRotatingPlaceholder'; import { serializeWallpaper } from '../../utils/hydrateWallpaper'; import { randomItem } from '../../utils/randomItem'; import { shuffleItems } from '../../utils/shuffleItems'; import { getSupabaseForBrowser } from '../../utils/supabase/getSupabaseForBrowser'; import { provideClientId } from '../../utils/supabase/provideClientId'; -import { string_prompt } from '../../utils/typeAliases'; +import { validateMaxdown } from '../Content/Maxdown/validateMaxdown'; import { parseKeywordsFromWallpaper } from '../Gallery/GalleryFilter/utils/parseKeywordsFromWallpaper'; import { Hint } from '../Hint/Hint'; +import { addFontToContent } from '../ImportFonts/addFontToContent'; import { changeFontsInContent } from '../ImportFonts/changeFontInContent'; -import { ImportFonts } from '../ImportFonts/ImportFonts'; +import { extractFontsFromContent } from '../ImportFonts/extractFontsFromContent'; import { PublishLink } from '../PublishModal/PublishLink'; -import { TorusInteractiveImage } from '../TaskInProgress/TorusInteractiveImage'; +import { LoadingInteractiveImage } from '../TaskInProgress/LoadingInteractiveImage'; import { WallpaperLink } from '../WallpaperLink/WallpaperLink'; import styles from './CopilotPanel.module.css'; +import { CopilotPanelChangeFont } from './CopilotPanelChangeFont'; +import { CopilotPanelRotateColors } from './CopilotPanelRotateColors'; /** * Renders the co-pilot panel for text commands to edit the page. */ export function CopilotPanel() { const router = useRouter(); + const locale = useLocale(); const [wallpaper, modifyWallpaper] = useCurrentWallpaper(); const [runningPrompt, setRunningPrompt] = useState(null); const [isMenuOpen, setMenuOpen] = useState(false); /* <- TODO: useToggle */ @@ -40,14 +46,14 @@ export function CopilotPanel() { const placeholders = useMemo(() => shuffleItems(...COPILOT_PLACEHOLDERS), []); const placeholder = useRotatingPlaceholder(...placeholders); const randomFont = useMemo( - () => randomItem(...FONTS) /* <- TODO: [🧠] Some better heurictic than pure random */, + () => randomItem(...FONTS) /* <- TODO: [🧠][🔠] Some better heurictic than pure random */, // Note: Wallpaper is dependency because we want to offer new font after each change of the font /* eslint-disable-next-line react-hooks/exhaustive-deps */ [wallpaper], ); const modifyWallpaperFont = useCallback(() => { modifyWallpaper((modifiedWallpaper) => { - modifiedWallpaper.content = changeFontsInContent(modifiedWallpaper.content, randomFont); + modifiedWallpaper.content = changeFontsInContent(modifiedWallpaper.content, randomFont.fontFamily); modifiedWallpaper.saveStage = 'EDITED'; return modifiedWallpaper; }); @@ -83,37 +89,71 @@ export function CopilotPanel() { `), ); - const { content: oldContent } = wallpaper; + let { content: oldContent } = wallpaper; - const response = await fetch( - `/api/update-wallpaper-content?clientId=${await provideClientId({ - isVerifiedEmailRequired: IS_VERIFIED_EMAIL_REQUIRED.EDIT, - })}`, + const fonts = extractFontsFromContent(oldContent); + if (fonts.size !== 1) { + throw new Error(`Expected exactly one font in the content, got ${fonts.size}`); + } + const font = Array.from(fonts)[0]!; + + oldContent = removeContentComments(oldContent); + + const updateWebsiteContentLocaleMap = { + en: 'updateWebsiteContent', + cs: 'updateWebsiteContentCs', + /* <- TODO: [👧] Constrain key to only existing PTPs in the library */ + }; + + const { newContent } = await webgptPtpLibrary.createExecutor( + updateWebsiteContentLocaleMap[ + locale + ] /* <- TODO: !! Deal here with locale better - detect from content NOT app */, + getExecutionTools( + await provideClientId({ + isVerifiedEmailRequired: IS_VERIFIED_EMAIL_REQUIRED.EDIT, + }), + ), + )( { - method: 'POST', - body: JSON.stringify({ - prompt, - wallpaper: { content: oldContent }, - } satisfies UpdateWallpaperContentRequest), + oldContent, + rawAssignment: prompt, + }, + (taskProgress) => { + console.info('CopilotPanel: Update wallpaper content: ', { taskProgress }); }, ); - if (response.ok === false) { - // TODO: [🈵] If 4XX error, show also the message from json body - throw new Error(`Prompt failed with status ${response.status}`); - } + const newContentWithFont = addFontToContent(validateMaxdown(newContent || ''), font); + + /*/ + const newContentWithMetadata = spaceTrim( + (block) => ` + ${block(newContentWithFont)} + + --- + +
+ + ## Old content: + + ${block(oldContent)} - const { - updatedWallpaper: { content: newContent }, - } = (await response.json()) as UpdateWallpaperContentResponse; +
+ `, // <- TODO: !! Just newContent, maybe use this in some debug mode + ); + /**/ + /**/ + const newContentWithMetadata = newContentWithFont; + /**/ - console.info({ oldContent, newContent }); + console.info('CopilotPanel: Update wallpaper content: ', { oldContent, newContent }); const newWallpaper = modifyWallpaper((modifiedWallpaper) => { // Note: [🗄] title is computed after each change id+parent+author+keywords are computed just once before save // TODO: Use here addWallpaperComputables modifiedWallpaper.parent = modifiedWallpaper.id; - modifiedWallpaper.content = newContent + '\n\n
' + prompt; + modifiedWallpaper.content = newContentWithMetadata; modifiedWallpaper.saveStage = 'SAVING'; modifiedWallpaper.keywords = Array.from(parseKeywordsFromWallpaper(modifiedWallpaper)); modifiedWallpaper.id = computeWallpaperUriid(modifiedWallpaper); @@ -133,10 +173,10 @@ export function CopilotPanel() { } finally { setRunningPrompt(null); } - }, [router, wallpaper, modifyWallpaper, runningPrompt, inputRef]); + }, [locale, router, wallpaper, modifyWallpaper, runningPrompt, inputRef]); return ( -
+
) : ( - + )} @@ -279,18 +319,16 @@ export function CopilotPanel() {
  • Edit markdown - {/* <- TODO: Should be here "Edit markdown" or "Edit content" */} + {/* <- TODO: [🧠] Should be here "Edit markdown" or "Edit content" or "Advanced edit" + + It should be in the submenu of "Advanced edits" + */}
  • - */ - /> - + +
  • +
  • +
  • +
  • + Make new web +
  • Contact
  • + {/* TODO: !! The menu should be like this: - [x] Show as visitor - [~] Share - [x] Get the web - - [ ] Edit + - [x] Edit - [ ] - advanced prompting - [ ] - colors - [ ] - content diff --git a/src/components/CopilotPanel/CopilotPanelChangeFont.tsx b/src/components/CopilotPanel/CopilotPanelChangeFont.tsx new file mode 100644 index 0000000000..4143574d7f --- /dev/null +++ b/src/components/CopilotPanel/CopilotPanelChangeFont.tsx @@ -0,0 +1,39 @@ +import { useCallback, useMemo } from 'react'; +import { FONTS } from '../../../config'; +import { useCurrentWallpaper } from '../../utils/hooks/useCurrentWallpaper'; +import { randomItem } from '../../utils/randomItem'; +import { changeFontsInContent } from '../ImportFonts/changeFontInContent'; +import { ImportFonts } from '../ImportFonts/ImportFonts'; + +/** + * Renders the co-pilots panel for changing the font of the page. + */ +export function CopilotPanelChangeFont() { + const [wallpaper, modifyWallpaper] = useCurrentWallpaper(); + const randomFont = useMemo( + () => randomItem(...FONTS) /* <- TODO: [🧠][🔠] Some better heurictic than pure random */, + // Note: Wallpaper is dependency because we want to offer new font after each change of the font + /* eslint-disable-next-line react-hooks/exhaustive-deps */ + [wallpaper], + ); + const modifyWallpaperFont = useCallback(() => { + modifyWallpaper((modifiedWallpaper) => { + modifiedWallpaper.content = changeFontsInContent(modifiedWallpaper.content, randomFont.fontFamily); + modifiedWallpaper.saveStage = 'EDITED'; + return modifiedWallpaper; + }); + }, [modifyWallpaper, randomFont]); + + return ( + <> + */ + /> + + + ); +} diff --git a/src/components/CopilotPanel/CopilotPanelRotateColors.tsx b/src/components/CopilotPanel/CopilotPanelRotateColors.tsx new file mode 100644 index 0000000000..241f9a3104 --- /dev/null +++ b/src/components/CopilotPanel/CopilotPanelRotateColors.tsx @@ -0,0 +1,37 @@ +import { useCallback } from 'react'; +import { useCurrentWallpaper } from '../../utils/hooks/useCurrentWallpaper'; +import { rotateItems } from '../../utils/rotateItems'; + +/** + * Renders the co-pilots panel for rotating the colors of the page. + */ +export function CopilotPanelRotateColors() { + const [wallpaper, modifyWallpaper] = useCurrentWallpaper(); + const modifyWallpaperFont = useCallback(() => { + modifyWallpaper((modifiedWallpaper) => { + modifiedWallpaper.colorStats.palette = rotateItems(modifiedWallpaper.colorStats.palette, { count: -1 }); + modifiedWallpaper.saveStage = 'EDITED'; + + return modifiedWallpaper; + }); + }, [modifyWallpaper]); + + return ( + <> + + + ); +} diff --git a/src/components/DeviceIframe/DeviceIframe.module.css b/src/components/DeviceIframe/DeviceIframe.module.css index f3aa3a96f1..9d9e610eb1 100644 --- a/src/components/DeviceIframe/DeviceIframe.module.css +++ b/src/components/DeviceIframe/DeviceIframe.module.css @@ -10,7 +10,7 @@ perspective: 1000px; } -.DeviceIframe iframe { +.DeviceIframe .iframe { /*/ outline: 1px dotted rgb(103, 223, 79); /**/ @@ -18,7 +18,7 @@ width: 100%; height: 100%; - box-shadow: 0 0 50px rgba(126, 126, 126, 0.452); + box-shadow: 0 0 80px rgb(0, 0, 0); transform: scale(0.8) rotateY(15deg); transition: transform 0.5s ease-in-out; @@ -30,6 +30,6 @@ /**/ } -.DeviceIframe:hover iframe { +.DeviceIframe:hover .iframe { transform: scale(0.9) rotateY(0deg); } diff --git a/src/components/DeviceIframe/DeviceIframe.tsx b/src/components/DeviceIframe/DeviceIframe.tsx index 5e685a1ceb..fa2efad451 100644 --- a/src/components/DeviceIframe/DeviceIframe.tsx +++ b/src/components/DeviceIframe/DeviceIframe.tsx @@ -1,5 +1,10 @@ import Link from 'next/link'; +import { useState } from 'react'; +import { IS_DEVELOPMENT } from '../../../config'; import { classNames } from '../../utils/classNames'; +import { Color } from '../../utils/color/Color'; +import { textColor } from '../../utils/color/operators/furthest'; +import type { WithTake } from '../../utils/take/interfaces/ITakeChain'; import { string_css_class, string_url } from '../../utils/typeAliases'; import styles from './DeviceIframe.module.css'; @@ -19,18 +24,53 @@ interface DeviceIframeProps { * Optional CSS class name */ className?: string_css_class; + + /** + * Placeholder color before the iframe is loaded + */ + color?: WithTake; } /** * Renders an iframe based on the given props */ export function DeviceIframe(props: DeviceIframeProps) { - const { src, isInteractive, className } = props; + const { src, isInteractive, className, color } = props; - if (isInteractive) { + const [isIframeShownInDevelopment, setIframeShownInDevelopment] = useState(false); + + if (IS_DEVELOPMENT && !isIframeShownInDevelopment) { return ( -
    -