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..eceddb0e28 100644 --- a/.vscode/terminals.json +++ b/.vscode/terminals.json @@ -4,11 +4,16 @@ { "name": "👨🏽‍💻 Develop", "command": "npm run dev", - "focus": true + "focus": false + }, + { + "name": "👨🏽‍💻 Run promptbook server", + "commands": ["ts-node ./promptbook-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 +25,7 @@ { "name": "🩹 Lint fix", "command": "npm run lint -- --fix", + "onlySingle": true, "execute": false }, { @@ -143,26 +149,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 +179,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 +219,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/CNAME b/CNAME index 28d5773f52..3f57105498 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -1-2i.com \ No newline at end of file +webgpt.cz \ No newline at end of file diff --git a/README.md b/README.md index 665d9e6b98..3703567021 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ -# ⏣ AI web maker +# ⏣ WebGPT -https://1-2i.com/ \ No newline at end of file +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/config.ts b/config.ts index 7de739b74d..297f25e292 100644 --- a/config.ts +++ b/config.ts @@ -12,7 +12,7 @@ import { isUrlOnPrivateNetwork } from './src/utils/validators/isUrlOnPrivateNetw import { validateUuid } from './src/utils/validators/validateUuid'; export const APP_VERSION = packageJson.version; -export const APP_NAME = packageJson.name; +export const APP_NAME = 'WebGPT'; const config = ConfigChecker.from({ ...process.env, @@ -20,11 +20,15 @@ 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_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 IS_DEVELOPMENT = isUrlOnPrivateNetwork( NEXT_PUBLIC_URL, @@ -41,6 +45,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 @@ -989,7 +995,13 @@ 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; 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 63ae545e20..55052541dc 100644 --- a/database/dumps/structure.dump.pgsql +++ b/database/dumps/structure.dump.pgsql @@ -1,3774 +1,3865 @@ --- --- 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 --- - +-- +-- 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, + flow_state_id uuid, + 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: PromptExecution; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."PromptExecution" ( + id bigint NOT NULL, + "createdAt" timestamp with time zone DEFAULT now() NOT NULL, + "clientId" uuid DEFAULT gen_random_uuid(), + "ptpUrl" text, + "promptAt" timestamp with time zone, + "promptContent" text, + "promptModelRequirements" jsonb, + "promptParameters" jsonb, + "resultAt" timestamp with time zone, + "resultContent" text, + "usedModel" text, + "rawResponse" jsonb +); + + +ALTER TABLE public."PromptExecution" OWNER TO postgres; + +-- +-- Name: TABLE "PromptExecution"; Type: COMMENT; Schema: public; Owner: postgres +-- + +COMMENT ON TABLE public."PromptExecution" IS 'Log and cache all prompt executions'; + + +-- +-- Name: PromptExecution_id_seq1; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +ALTER TABLE public."PromptExecution" ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public."PromptExecution_id_seq1" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- 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: PromptExecution PromptExecution_pkey1; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."PromptExecution" + ADD CONSTRAINT "PromptExecution_pkey1" PRIMARY KEY (id); + + +-- +-- 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: mfa_factors_user_id_idx; Type: INDEX; Schema: auth; Owner: supabase_auth_admin +-- + +CREATE INDEX mfa_factors_user_id_idx ON auth.mfa_factors USING btree (user_id); + + +-- +-- 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_flow_state_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: supabase_auth_admin +-- + +ALTER TABLE ONLY auth.saml_relay_states + ADD CONSTRAINT saml_relay_states_flow_state_id_fkey FOREIGN KEY (flow_state_id) REFERENCES auth.flow_state(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: PromptExecution; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public."PromptExecution" 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: TABLE "PromptExecution"; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public."PromptExecution" TO anon; +GRANT ALL ON TABLE public."PromptExecution" TO authenticated; +GRANT ALL ON TABLE public."PromptExecution" TO service_role; + + +-- +-- Name: SEQUENCE "PromptExecution_id_seq1"; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON SEQUENCE public."PromptExecution_id_seq1" TO anon; +GRANT ALL ON SEQUENCE public."PromptExecution_id_seq1" TO authenticated; +GRANT ALL ON SEQUENCE public."PromptExecution_id_seq1" 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/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/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..c9d1d1ca9a 100644 --- a/documents/contact.md +++ b/documents/contact.md @@ -7,8 +7,10 @@ - [Telegram](https://t.me/hejny) - https://www.pavolhejny.com/contact -## 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/) + + \ No newline at end of file diff --git a/documents/explanation.html b/documents/explanation.html index 74758886c0..434ddcb910 100644 --- a/documents/explanation.html +++ b/documents/explanation.html @@ -1,4 +1,4 @@ -

The AI web.

+

What The Web?!

There is probably no creative industry that won't be deeply affected by generative AI. The webdesign is no exception. But designing a website with AI can be quite challenging. You may find yourself asking many questions @@ -54,7 +54,7 @@

The AI web.

We have great tools such as ChatGPT, - MidJourney, Dalle-2, as well as + MidJourney, Dalle-3, as well as many models for Stable diffusion. However, these are not web generators; they are great building blocks that require balancing, tweaking, and a considerable amount of expertise and time. 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/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/other/articles/rozhovor-pro-kapler-o-ai.md b/other/articles/rozhovor-pro-kapler-o-ai.md new file mode 100644 index 0000000000..a2892f3ff8 --- /dev/null +++ b/other/articles/rozhovor-pro-kapler-o-ai.md @@ -0,0 +1,156 @@ +# 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 měsícem dal o sobě vědět [Pavol Hejný](https://www.pavolhejny.com/) s projektem na [generování webů pomomocí AI WebGPT](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 svateb, konferencí, landing page pro produkty,... + +**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í. + +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áží žrát 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 taková investice může vyplatit, ale u prezentačních webů to jsou obvykle utopené náklady. + +**A nedají se všechny tyhle věci udělat čistě pomocí ChatGPT?** + +Rozhodně ano, WebGPT ostatně na pozadí OpenAI API využívá. Zase je to jen o nákladech. Pokud jsi majitelem pizzerie, máš umět tvořit nejlepší pizzu, ne nejlepší prompt. + +A pak je tu mnoho technických detailů, které jsou potřeba na webu udělat 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. + + + +Jinak svým způsobem je WebGPT také redakčním systémem, akorát jeho administrace je přirozený text. + +**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, máme čtyři v principu 6 směrů kterými dokážeme zlepšovat výsledek, ty se dají docela dobře kombinovat mezi sebou: + +- **Model picking** vybrat správný model pro mou potřebu. Obvykle je nejlepší začínat na `GPT-4 32k` a poté optimalizovat směrem dolů. +- **Param finding** ladit parametry jako `temperature ` nebo `top_t` +- **Fine tunning** dotrénovat správný model na konkrétní úkol. Pokud mám tisíce příkladů vstupů a výstupů, tak to funguje dobře. Na rychlé prototypování je to ale pomalé a náročné. +- **Prompt writing**, kdy se snažím vymyslet a vyladit jeden prompt, který bude dělat přesně to, co chci. To funguje dobře pro jednodušší úkoly, ale pro složitější úkoly to často selhává na detailech. Například pokud chci vygenerovat obsah webu, pro superjednoduché webové stránky to funguje. Jakmile se ale dostanu do složitějších věcí, tak to opakuje stejný obsah, nebo se zacyklí na nějakém detailu, nedodrží formátování, nedokáže dodržet předepsanou strukturu, pomíchá jednotlivé sekce, atd... Obecně platí, že jakýkoliv model má jen omezenou _„kapacitu“_ a pokud požaduji komplexnější úkol, dostávám chabé výsledky. +- **Multishot**: často je lepší rozdělit úkol na několik zcela oddělených úkolů. Například místo _"Napiš mi komplení obsah webu v markdownu pro kavárnu {name}"_ rozdělit na _„Napiš mi název kavárny“_, _„Napiš mi popis kavárny“_, _„Napiš mi menu kavárny“_, _„Vygeneruj mi fotky kavárny“_, _„Napiš mi odkaz na sociální sítě kavárny“_, atd... Každý z těchto úkolů je mnohem jednodušší a model je schopen je zvládnout. Zároveň můžeme nechat model podmínečně instruovat sama sebe. Například pokud se nám vygenerovaný název zdá dlouhý, můžeme ho požádat o zkrácení. Obecně se takovému přístupu říká **AutoGPT**. +- **Multiapproach**: zároveň některé z úkolů mnohem lépe zvládne klasický kód oproti LLM modelu. Například převod markdown na html. To by se sice dalo provést i pomocí GPT, avšak je to zcela zbytečné a neefektivní. Úkoly se zcela deterministickým výsledkem se mají dělat pomocí klasického `if/else` programování. A pak máme situce, kdy se je uprostřed generovaní potřeba uživatele doptat a nevymýšlet si například _"Je název pro tvou kavárnu 'Kavárny Pod Kaštanem' dobrý?"_ nebo _„Programuješ i v TypeScriptu nebo mám napsat jen JavaScript“_. Také je občas potřeba určité informace dohledat a ne si je _„vyhalucinovat“_. V ChatGPT takovou věc mají na starosti pluginy. V ChatBingu je integrovaný vyhledávač Bing, já ve WebGPT kombinuju možnosti od OpenAI a mám vytvořenou [vlastní lehkou nadstavbu - **📖 PromptBook**](https://github.com/webgptorg/promptbook) aby šli podobné postupy psát i neprogramátorem v dokumentech. + +**A jaký je rozdíl mezi tvou knihovnou a desítkami jiných knihoven pro AutoGPT?** + +To co dělám je opravdu lehká nadstavba nad OpenAI API a dalšími, která umožňuje psát podobné postupy i neprogramátorem v dokumentech. + +Jde o takovou _„kuchařku receptů“_ pro řízení velkých jazykových modelů i naprostým neprogramátorem. + +V principu je to jen o tom, že si vytvořím šablonu, která má nějaké proměnné a ty se nahradí za výsledky z modelu nebo od uživatele. Celé je to oproti jiným knihovnám velmi soustředěné na vývoj uživatelských aplikací, takže tam řeším i interakci s UI, streamování výsledků, UX, atd... + +Druhá důležitá věc je, že se snažím rozdělit role. Dneska je prakticky nemožné sehnat vývojáře, sehnat copyrightry je jednodušší a psaní podobných promptbooků se zcela jistě stane novou profesí. + +Opravdu zajímavé na tom je, že taková práce má jak povahu copywritingu, tak povahu programování pomocí přirozeného jazyka. + +Jako výsledek dostanu úplně obyčejnou asynchronní funkci, kterou lze použít přesně jako jakoukoliv jinou funkci v rámci kódu. + +**A nemyslíš, že generativní AI a celý ten trend, že co týden vznikne stovka aplikací a knihoven, je jen další obrovská nafouknutá bublina jako například NFTs?** + +Zcela jistě splaskne bublina a mnoho projektů zkrachuje, neuspěje nebo zapadne do zapomnění. Avšak to je naprosto v pořádku – v tuhle chvíli nevíme, co dává smysl a co smysl nedává smysl a bez praktického otestování to ani nezjistíme. + +Co jsem si však zcela jistý, že ještě rozhodně nejsme na vrcholu – Například co se týká generování obrázků je situace taková, že naprostým etalonem je MidJourney 5.x,avšak MidJourney se nedá použít přes API jako komponenta aplikací jakou je například WebGPT, takže nad ním ještě nemohou vznikat žádné sekundární služby, které by fungovaly v reálném čase pro koncové uživatele. + +Dalle-2, Stable Fusion se tímto způsobem použít dají, avšak ty jsou graficky na mnohem nižší úrovni. A jakmile se otevře Dalle-3, případně MidJourney API, přijde podobná exploze sekundárních služeb, jakou teď zažíváme nad textovými modely. + +Zároveň tam bude určitý synergický efekt, protože pro mnoho věcí dává smysl tyto dva typy modelů kombinovat – například pro WebGPT. + +A pak mám druhý důvod, proč se nemyslím, že jde o pouhou nafouknutou bublinu. Ve společnosti je ohromná míra neefektivity a neskutečné množství věcí lze nově automatizovat. + +Také si je dobré uvědomit, že ChatGPT nebyl ani tolik technologický průlom, ale spíš dokázali vytvořit naprosto kularvoucí UX pro už existující GPT-3, které trochu doladili a vylepšili a dokázali vytvořit rozhraní, se kterým dokáže pracovat zcela běžný člověk. + +Dobrého půl roku před ChatGPT jsme měli my programátoři k dispozici GitHub Co-pilot a ještě celý rok předtím to byl Tomáš Studeník, který jako první člověk v Česku ukázal, že umělá inteligence dokáže napsat smysluplný lidský text v podobě divadelní hry. To bylo postavené nad GPT-2 a GPT-2 byl ten opravdový technologický průlom, v tu dobu ještě nezaznamenaný širokou veřejností. + +!!! Ainautes někde + +**Když jsme u té divadelní hry, jakým způsobem ovlivní generativní AI jazyk a kulturu?** + +Obsah byl vždy ovlivněn formou a způsobem distribuce. + +Knihtisk byl _„jen“_ obyčejná technologie, kdy Gutenberg objevil správnou slitinu pro raznice, avšak tahle čistě technologická změna odemkla ohromný potenciál a řádově zlevnila výrobu knih. Najednou byli knihy mnohem levnější, mnohem dostupnější, dávalo mnohem větší smysl umět je číst a přestali být luxusním zbožím. I díky tomu se v Evropě odehrály neuvěřitelné společenské a sociální změny. + +Internet zapříčinil obdobný efekt- najednou se dal obsah šířit nejen téměř zadarmo, ale přestala hrát roli vzdálenost. + +Generativní umělá inteligence přinese podobný skok – stále tu máme vzdálenost například v podobě jazykových bariér nebo bariér, kdy jeden člověk preferuje audio zatímco druhý preferuje text. +Takové bariéry byly doposud nepřekonatelné respektive tyto bariéry šly doposud překonat pouze s vynaložením netriviálních ekonomických zdrojů. Pokud člověk napsal knihu namluvit audioknihu vyžadovalo značnou část dalších zdrojů. + +Za pár let bude zcela běžné, že já pošlu zprávu v libovolné formě a libovolném jazyce a ty si ji pustíš v libovolné kombinaci obého. + +Zároveň bude možné, aby vzniklo mnoho obsahu, který bude výrazně více na míru – J.K.Rowlingová v minulosti vytvořila naprosto pevný obsah a až kolem toho vznikl úžasný svět Harryho Pottera. + +Budoucí J K Rowling může vytvořit koncept takového světa, kdy popíše konkrétní příklady, konkrétní situace, konkrétní části světa, avšak každý čtenář si bude moc vytvořit vlastní příběh nad tímto světem. + +Možná se dokonce rozdělí autorství na autory těch světů a konceptů a na autory konkrétních příběhů v rámci těch světů. + +Podobná věc s autorstvím se teď diskutuje z hlediska obrazů – Možná se zcela rozdělí autorství stylu a konkrétního obrazu. + +Zároveň bude velmi pravděpodobné, že v těchto světech bude možné existovat v mnoha různých formách – někdo je bude chtít číst, jiný si bude chtít povídat s postavami, jiný bude chtít poslouchat rozhlas z Ministerstva kouzel a někdo si bude chtít zahrát počítačovou hru. + +**Když mluvíš o počítačových hrách, ty sám jsi počítačovou hru vyviděl, řekni něco víc o hře Towns, kterou jsi vyvíjel** + +Šlo o online strategickou prohlížečovou hru - taková kombinace mezi Age of Empires a Travianem, který v té v té době frčel. Už je to poměrně dlouhá doba, doslova polovina a mého života kdy jsem tuhle věc začal dělat před 15 lety v mých 15 letech a docela jsem se na tom naučil programovat. + +V jedné z pozdějších verzí byl koncept nekonečného automatický generovaného světa + hráč mohl libovolně kombinovat budovy – například postavit dva domy na hradbu nebo pět domů na sebe z čehož vznikl něco jako mrakodrap. Vše bylo procedurálně generované, takže a šlo o takový proto-koncept vektorového prostoru všech možných budov. + + + + +**Další z projektů (díky kterému se známe) je virtuální tabule Collboard. Řekni něco víc!** + +Jde o virtuální tabuli, kterou jsme založili v rámci elektronických učebnic H-Edu na začátku pandemie Covidu. + +Já mám obecně rád modulární systémy, a tak jsem celý systém navrhl tak, že jakýkoliv prvek je zároveň pluginem. + +A když se o H-Edu a Collboardu bavíme, jak do H-Edu tak do Collboardu připravujeme integraci s AI. + +**Jak se k tomu staví učitelé, nechtějí podobné věci spíš omezovat nebo zakazovat** + +Záleží na tom konkrétním učiteli, ale co je pro mě naprosto neskutečné, jak se učitelé dokázali popasovat s celou pandemií covidu a ze dne na den se z nich stali IT správci virtuálních tříd a k tomu zůstali ve své práci učitele. + +Velkou propagaci AI pro školství v Čechách dělá Eva Nečasová nebo PRG.AI nebo i ty, který píšeš opravdu obrovské množství kvalitního obsahu o AI v češtině. + +jsem tam ale čtu i povzdechy o tom, jak žáci používají vygenerovaný text a otázky Jakým způsobem do lze efektivně detekovat a zakazovat + +Často ale také šlyším povzdechy, že by se AI a obecně technologie měli ve škole omezit. + +**A nebylo by teda lepší generativní AI ve školách zakázat?** + +Ne, avšak rozvedu svou odpověď: + +Bez ohledu na to, že sám jsem vývojář a nadšenec do nových technologií a k tomu vyvíjím nástroje nad velkými jazykovými modely, tak i kdybych nic z toho nedělal, fakt jeden: **budoucnost s generativní umělou inteligencí je tady** a prakticky se jejím dopadům nelze vyhnout. + +Pravděpodobně nebude existovat žádná intelektuální práce, která by touhle revolucí nebyla ovlivněna – neříkám, že zanikne; říkám, že prakticky všechny profese, které se zabývají manipulací s informacemi budou tak či onak ovlivněny. + +Podle mě velmi dobrým příklad je počítač a kalkulačka, ve 40. letech 20. století slovo _„počítač“_ neznamenalo přístroj, ale člověka, který počítá tabulky. Představme si v té době utvrzovat budoucí žáky v tom, že ty počítače jsou stejně jenom nějaký divný hype a že je velmi důležité umět počítat sloupečky čísel ručně. + +Určitě je důležité umět počítat a mít přehled o tom jak funguje matematika a stejně tak je důležité znát jazyk, ale vývýbat se využívání velkých jazykových modelů (např. přes ChatGPT) je nesmírně hloupé, protože nás to nepřipravuje na budoucnost a jenom způsobí, že zůstaneme montovnou Evropy. + +Je důležité nepřeskakovat laťku ze země, ale použít ji jako stupínek. + +**Díky moc za rozhovor! Ještě se tě zeptám, můžou se s tebou čtenáři potkat někde na probíhajících Dnech AI?** + +Mluvíme teď na mnoha konferencích, Na Dnech AI máme v úterý s Tomášem z Ai*nautes přednášku o business příležitostech v AI světě a v pátek mluvím o tom, jak mohou využít generativní AI děti. Zároveň teď v průběhu podzimu probíhá mnoho dalších akcí. 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 index d75a47bd95..038c252c9b 100644 --- a/other/posts/2023-09-12.md +++ b/other/posts/2023-09-12.md @@ -19,7 +19,7 @@ Stačí mu jen napsat, co byste chtěli, a on to udělá nebo navrhne lepší ř Pokud vás tento koncept zaujal, intenzivně pracuju na nástroji, který tohle všechno dokáže. -https://1-2i.com/new/from-image +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 🦄 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/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 3449515562..be83f32c95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,28 @@ { - "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": { "@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", + "@faker-js/faker": "8.0.2", "@monaco-editor/react": "4.5.1", + "@octokit/rest": "18.12.0", + "@promptbook/core": "0.9.0", + "@promptbook/execute-javascript": "0.9.0", + "@promptbook/openai": "0.9.0", + "@promptbook/remote-client": "0.9.0", + "@promptbook/remote-server": "0.9.0", + "@promptbook/types": "0.9.0", + "@promptbook/utils": "0.9.0", + "@promptbook/wizzard": "0.9.0", "@supabase/supabase-js": "2.26.0", "@types/file-saver": "2.0.5", "@vercel/og": "0.5.8", @@ -22,16 +31,19 @@ "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", - "insta-fetcher": "^1.3.26", + "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", "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", @@ -42,12 +54,15 @@ "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", "showdown": "2.1.0", "showdown-highlight": "3.1.0", - "spacetrim": "0.9.0", + "socket.io": "3.1.2", + "socket.io-client": "3.1.3", + "spacetrim": "0.9.2", "typescript": "4.9.4", "uuid": "9.0.0", "waitasecond": "1.11.1", @@ -59,6 +74,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", @@ -1079,11 +1095,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.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -1116,20 +1132,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" @@ -1215,9 +1231,9 @@ } }, "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" } @@ -1321,9 +1337,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.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1512,7 +1528,6 @@ "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, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1534,18 +1549,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==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "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", + "@babel/generator": "^7.23.0", + "@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.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1562,12 +1577,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.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2902,6 +2917,403 @@ "node": ">= 8" } }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "dependencies": { + "@octokit/types": "^6.40.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "dependencies": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@promptbook/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/core/-/core-0.9.0.tgz", + "integrity": "sha512-F5uidNsB/UpMTJ41041dYLFGn/hMDkrcwSjfd8ClsLAvXBjcSk3esc6uryy7uVZxbU/pQgaHp8EAMEvQvr9l0A==", + "dependencies": { + "n12": "1.6.0", + "spacetrim": "0.9.2" + } + }, + "node_modules/@promptbook/execute-javascript": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/execute-javascript/-/execute-javascript-0.9.0.tgz", + "integrity": "sha512-XYb9aYZSIlWiX/rLdYgOPeisqyLc719cFKIu14pKm6RcHatTrJFZ3bliFutnkeiHA5npdfqnJOwzacivBC3cMw==", + "dependencies": { + "n12": "1.6.0", + "spacetrim": "0.9.2", + "waitasecond": "1.11.1" + }, + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/openai": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/openai/-/openai-0.9.0.tgz", + "integrity": "sha512-YdG7gQJSW1xX8ApPNV18p75LPXQZrXnk2h0qEyg7nMGqldZ6a5XY4aesP3WNB6LQkhXBE5SIwnppZ/OaG7+ejQ==", + "dependencies": { + "openai": "4.13.0" + }, + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/openai/node_modules/openai": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.13.0.tgz", + "integrity": "sha512-EPqHcB0got9cXDZmQae1KytgA4YWtTnUc7tV8hlahZtcO70DMa4kiaXoxnutj9lwmeKQO7ntG+6pmXtrCMejuQ==", + "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", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/@promptbook/openai/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==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@promptbook/remote-client": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-client/-/remote-client-0.9.0.tgz", + "integrity": "sha512-Yw6sOW2pCzcK8E1Xom+jZKTlDAtHuGxP5FylHe9oUvBOKcg14Pg2mLVdzv4nF2O6Ng7kifU9wsTQi2XXRjznvg==", + "dependencies": { + "socket.io-client": "4.7.2" + }, + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/remote-client/node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "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/@promptbook/remote-client/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/@promptbook/remote-client/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/@promptbook/remote-client/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/@promptbook/remote-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/@promptbook/remote-client/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/@promptbook/remote-server": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-server/-/remote-server-0.9.0.tgz", + "integrity": "sha512-mFf1IjGtMsmCUcpwVw4AZoTOT5DgfDCIAWGVXLqlD8SWZAw8zHzCLEdabSCFiOppxWrtcQWkKEoo4rn7RKd/yA==", + "dependencies": { + "socket.io": "4.7.2", + "spacetrim": "0.9.2" + }, + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/remote-server/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/@promptbook/remote-server/node_modules/engine.io": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", + "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", + "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/@promptbook/remote-server/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/@promptbook/remote-server/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/@promptbook/remote-server/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/@promptbook/remote-server/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/@promptbook/remote-server/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/@promptbook/types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/types/-/types-0.9.0.tgz", + "integrity": "sha512-fz3qz23yBT9KiTyZr8uQUWYediYxhifWq9aev06js0N2mJTB9lT94PHioNGtkWFVyaCTUJMFyZ3boIL2wm8f6w==", + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/utils": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.9.0.tgz", + "integrity": "sha512-9LFec0+OpPfAEwp4SiwADWe3Z9CIRsDOe/xuQauLGpikaOhrZ+kBGPTy7J3CBNKsbRiuap0JdhUE3mLxV8Fx8g==", + "dependencies": { + "spacetrim": "0.9.2" + }, + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, + "node_modules/@promptbook/wizzard": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/wizzard/-/wizzard-0.9.0.tgz", + "integrity": "sha512-fnJTmjbLsSdqZRzUaCypSJSLLYBQHXbvoAhljtzqoIz/bQNAbfnfmd/2hX2t/zrmltWkDOPzq7x3HXW1W6LtRQ==", + "peerDependencies": { + "@promptbook/core": "0.9.0" + } + }, "node_modules/@puppeteer/browsers": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.5.tgz", @@ -3713,6 +4125,11 @@ "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", @@ -3906,6 +4323,43 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/body-parser": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", + "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.13.tgz", + "integrity": "sha512-fwnsbHhGfRBdMYhTdBWnmZb6UqHQhDoADUUiRKyJxjb9S7ZBGHt8nmo9quXUSfjR69V9DnAU8BZN13GxePXb7Q==" + }, + "node_modules/@types/connect": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", + "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", + "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.15", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", + "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", + "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", @@ -3938,6 +4392,30 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "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.39", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", + "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "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", @@ -3975,12 +4453,17 @@ "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, "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" } }, + "node_modules/@types/http-errors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", + "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", + "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", @@ -4065,6 +4548,12 @@ "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, + "node_modules/@types/mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", + "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -4127,14 +4616,24 @@ "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==", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", "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": "*", @@ -4172,8 +4671,7 @@ "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 + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@types/seedrandom": { "version": "3.0.4", @@ -4181,6 +4679,27 @@ "integrity": "sha512-/rWdxeiuZenlawrHU+XV6ZHMTKOqrC2hMfeDfLTIWJhDZP5aVqXRysduYHBbhD7CeJO6FJr/D2uBVXB7GT6v7w==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", + "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", + "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", + "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", @@ -4561,6 +5080,18 @@ "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", @@ -4817,6 +5348,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", @@ -5376,6 +5912,11 @@ "integrity": "sha512-IYsDJ4alS1aKEG/Au6BqFgCgKUlj1kbXXvDdsVTPOJ1YnV417yW+cjcX2Xqa4kunLEHVqfZY/oUP0q6VzWbFmg==", "hasInstallScript": true }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5387,6 +5928,14 @@ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5406,6 +5955,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", @@ -5415,6 +5972,11 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -5521,6 +6083,67 @@ "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", "dev": true }, + "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/iconv-lite": { + "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" + }, + "engines": { + "node": ">=0.10.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", @@ -5668,6 +6291,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", @@ -5690,7 +6321,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -6181,6 +6811,11 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6214,17 +6849,71 @@ "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 }, + "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.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.1.tgz", + "integrity": "sha512-qVSq3s+d4+GsqN0teRCJtM6tdEEXyWxjzbhVrCHmBS5ZTM0FS2MOS0D13dUXAWDUN6a+lHI/N1hF9Ytz6iLl9Q==", + "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", @@ -6371,8 +7060,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", @@ -6678,6 +7366,19 @@ "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", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -6687,6 +7388,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", @@ -6979,6 +7689,11 @@ "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", @@ -7016,6 +7731,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", @@ -7024,6 +7747,99 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.4.tgz", + "integrity": "sha512-843fqAdKeUMFqKi1sSjnR11tJ4wi8sIefu6+JC1OzkkJBmjtc/gM/rZ53tJfu5Iae/3gApm5veoS+v+gtT0+Fg==", + "dependencies": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.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": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "dependencies": { + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.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": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.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", @@ -7772,6 +8588,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", @@ -7883,6 +8707,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", @@ -8147,6 +9039,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", @@ -8292,6 +9214,14 @@ "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", @@ -8305,6 +9235,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", @@ -8361,25 +9299,10 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "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 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -8428,7 +9351,6 @@ "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, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -8833,7 +9755,6 @@ "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" }, @@ -8850,6 +9771,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8874,7 +9800,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" }, @@ -8886,7 +9811,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" }, @@ -8948,7 +9872,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" } @@ -9020,6 +9943,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", @@ -9052,6 +9983,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", @@ -9110,6 +10056,33 @@ "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.2.0", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", + "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==" + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -9293,6 +10266,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", @@ -9564,6 +10545,14 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -11330,6 +12319,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", @@ -11344,6 +12346,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", @@ -11361,7 +12371,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" }, @@ -11555,6 +12564,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", @@ -11611,6 +12628,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", @@ -11809,7 +12861,6 @@ "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, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11920,6 +12971,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", @@ -12169,6 +13231,24 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "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", @@ -12208,6 +13288,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", @@ -12397,9 +13482,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -12612,6 +13697,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", @@ -12796,6 +13893,39 @@ "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-body/node_modules/iconv-lite": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -12927,6 +14057,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", @@ -13179,8 +14330,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", @@ -13478,8 +14628,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", @@ -13584,6 +14733,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", @@ -13593,6 +14783,20 @@ "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", @@ -13618,6 +14822,11 @@ "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", @@ -13734,7 +14943,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", @@ -13833,21 +15041,75 @@ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "dependencies": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==" + }, + "node_modules/socket.io-client": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-3.1.3.tgz", + "integrity": "sha512-4sIGOGOmCg3AOgGi7EEr6ZkTZRkrXwub70bBB/F0JSkMOUFpA77WsL87o34DffQQ31PkbMUIadGOk+3tx1KGbw==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~4.1.0", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "node_modules/socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=10.0.0" } }, "node_modules/socks": { @@ -13914,9 +15176,9 @@ } }, "node_modules/spacetrim": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.9.0.tgz", - "integrity": "sha512-sd9wQrg/NFeB0K9B1EHe9givtpuCZW5K4QHEkNCTcPAmpXqW1Rbt1OukZeoUapeDYQw2qtYCREHrMiEi8pSTHA==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.9.2.tgz", + "integrity": "sha512-ims+9jBfcwXwM7YTrO9+p5LB34Er0gpSuw6QpiI1q521Oz/YmRKJcyUqRoHPOrSG/GKejGZuKelDlvp8t15usw==" }, "node_modules/spdx-correct": { "version": "3.2.0", @@ -14007,6 +15269,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", @@ -14634,6 +15904,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", @@ -14960,6 +16238,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", @@ -15083,6 +16373,11 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "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==" + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -15092,6 +16387,14 @@ "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", @@ -15183,6 +16486,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", @@ -15227,6 +16538,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", @@ -15247,6 +16566,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", @@ -15737,6 +17064,14 @@ "node": ">=8.0.0" } }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -15934,6 +17269,11 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==" + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -16818,11 +18158,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.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "requires": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -16848,17 +18188,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": { @@ -16917,9 +18257,9 @@ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@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", @@ -16998,9 +18338,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.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -17132,7 +18472,6 @@ "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, "requires": { "regenerator-runtime": "^0.14.0" } @@ -17148,18 +18487,18 @@ } }, "@babel/traverse": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.19.tgz", - "integrity": "sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "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", + "@babel/generator": "^7.23.0", + "@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.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -17172,12 +18511,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.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -18174,6 +19513,321 @@ "fastq": "^1.6.0" } }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/plugin-paginate-rest": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "requires": { + "@octokit/types": "^6.40.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "requires": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "@promptbook/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/core/-/core-0.9.0.tgz", + "integrity": "sha512-F5uidNsB/UpMTJ41041dYLFGn/hMDkrcwSjfd8ClsLAvXBjcSk3esc6uryy7uVZxbU/pQgaHp8EAMEvQvr9l0A==", + "requires": { + "n12": "1.6.0", + "spacetrim": "0.9.2" + } + }, + "@promptbook/execute-javascript": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/execute-javascript/-/execute-javascript-0.9.0.tgz", + "integrity": "sha512-XYb9aYZSIlWiX/rLdYgOPeisqyLc719cFKIu14pKm6RcHatTrJFZ3bliFutnkeiHA5npdfqnJOwzacivBC3cMw==", + "requires": { + "n12": "1.6.0", + "spacetrim": "0.9.2", + "waitasecond": "1.11.1" + } + }, + "@promptbook/openai": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/openai/-/openai-0.9.0.tgz", + "integrity": "sha512-YdG7gQJSW1xX8ApPNV18p75LPXQZrXnk2h0qEyg7nMGqldZ6a5XY4aesP3WNB6LQkhXBE5SIwnppZ/OaG7+ejQ==", + "requires": { + "openai": "4.13.0" + }, + "dependencies": { + "openai": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.13.0.tgz", + "integrity": "sha512-EPqHcB0got9cXDZmQae1KytgA4YWtTnUc7tV8hlahZtcO70DMa4kiaXoxnutj9lwmeKQO7ntG+6pmXtrCMejuQ==", + "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", + "web-streams-polyfill": "^3.2.1" + } + }, + "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==" + } + } + }, + "@promptbook/remote-client": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-client/-/remote-client-0.9.0.tgz", + "integrity": "sha512-Yw6sOW2pCzcK8E1Xom+jZKTlDAtHuGxP5FylHe9oUvBOKcg14Pg2mLVdzv4nF2O6Ng7kifU9wsTQi2XXRjznvg==", + "requires": { + "socket.io-client": "4.7.2" + }, + "dependencies": { + "engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "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" + } + }, + "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==" + }, + "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" + } + }, + "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": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + } + } + }, + "@promptbook/remote-server": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/remote-server/-/remote-server-0.9.0.tgz", + "integrity": "sha512-mFf1IjGtMsmCUcpwVw4AZoTOT5DgfDCIAWGVXLqlD8SWZAw8zHzCLEdabSCFiOppxWrtcQWkKEoo4rn7RKd/yA==", + "requires": { + "socket.io": "4.7.2", + "spacetrim": "0.9.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "engine.io": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", + "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", + "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" + } + }, + "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==" + }, + "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" + } + }, + "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" + } + }, + "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": {} + } + } + }, + "@promptbook/types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/types/-/types-0.9.0.tgz", + "integrity": "sha512-fz3qz23yBT9KiTyZr8uQUWYediYxhifWq9aev06js0N2mJTB9lT94PHioNGtkWFVyaCTUJMFyZ3boIL2wm8f6w==", + "requires": {} + }, + "@promptbook/utils": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.9.0.tgz", + "integrity": "sha512-9LFec0+OpPfAEwp4SiwADWe3Z9CIRsDOe/xuQauLGpikaOhrZ+kBGPTy7J3CBNKsbRiuap0JdhUE3mLxV8Fx8g==", + "requires": { + "spacetrim": "0.9.2" + } + }, + "@promptbook/wizzard": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@promptbook/wizzard/-/wizzard-0.9.0.tgz", + "integrity": "sha512-fnJTmjbLsSdqZRzUaCypSJSLLYBQHXbvoAhljtzqoIz/bQNAbfnfmd/2hX2t/zrmltWkDOPzq7x3HXW1W6LtRQ==", + "requires": {} + }, "@puppeteer/browsers": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.5.tgz", @@ -18822,6 +20476,11 @@ "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", @@ -19008,6 +20667,43 @@ "@babel/types": "^7.20.7" } }, + "@types/body-parser": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", + "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/component-emitter": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.13.tgz", + "integrity": "sha512-fwnsbHhGfRBdMYhTdBWnmZb6UqHQhDoADUUiRKyJxjb9S7ZBGHt8nmo9quXUSfjR69V9DnAU8BZN13GxePXb7Q==" + }, + "@types/connect": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", + "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", + "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.15", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", + "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", + "requires": { + "@types/node": "*" + } + }, "@types/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz", @@ -19040,6 +20736,30 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "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.39", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", + "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "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", @@ -19077,12 +20797,17 @@ "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, "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" } }, + "@types/http-errors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", + "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", + "dev": true + }, "@types/isomorphic-fetch": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz", @@ -19166,6 +20891,12 @@ "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, + "@types/mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", + "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", + "dev": true + }, "@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -19227,14 +20958,24 @@ "@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==", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/qs": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", "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": "*", @@ -19272,8 +21013,7 @@ "@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "@types/seedrandom": { "version": "3.0.4", @@ -19281,6 +21021,27 @@ "integrity": "sha512-/rWdxeiuZenlawrHU+XV6ZHMTKOqrC2hMfeDfLTIWJhDZP5aVqXRysduYHBbhD7CeJO6FJr/D2uBVXB7GT6v7w==", "dev": true }, + "@types/send": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", + "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", + "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", + "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", @@ -19607,6 +21368,15 @@ "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", @@ -19784,6 +21554,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", @@ -20188,6 +21963,11 @@ "resolved": "https://registry.npmjs.org/babylonjs/-/babylonjs-6.17.0.tgz", "integrity": "sha512-IYsDJ4alS1aKEG/Au6BqFgCgKUlj1kbXXvDdsVTPOJ1YnV417yW+cjcX2Xqa4kunLEHVqfZY/oUP0q6VzWbFmg==" }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -20199,11 +21979,21 @@ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==" + }, "base64-js": { "version": "1.5.1", "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", @@ -20213,6 +22003,11 @@ "tweetnacl": "^0.14.3" } }, + "before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, "big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -20299,6 +22094,56 @@ "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" + } + }, + "iconv-lite": { + "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" + } + }, + "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", @@ -20393,6 +22238,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", @@ -20409,7 +22259,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -20763,6 +22612,11 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -20790,17 +22644,54 @@ "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 }, + "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.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.1.tgz", + "integrity": "sha512-qVSq3s+d4+GsqN0teRCJtM6tdEEXyWxjzbhVrCHmBS5ZTM0FS2MOS0D13dUXAWDUN6a+lHI/N1hF9Ytz6iLl9Q==" + }, "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", @@ -20914,8 +22805,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", @@ -21146,12 +23036,27 @@ "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", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "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", @@ -21374,6 +23279,11 @@ } } }, + "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", @@ -21402,6 +23312,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", @@ -21410,6 +23325,66 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz", + "integrity": "sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "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": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "engine.io-client": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.4.tgz", + "integrity": "sha512-843fqAdKeUMFqKi1sSjnR11tJ4wi8sIefu6+JC1OzkkJBmjtc/gM/rZ53tJfu5Iae/3gApm5veoS+v+gtT0+Fg==", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", + "yeast": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, "enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -21981,6 +23956,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", @@ -22065,6 +24045,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", @@ -22262,6 +24303,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", @@ -22363,12 +24433,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==", "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", @@ -22418,18 +24498,10 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "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 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.6", @@ -22463,7 +24535,6 @@ "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, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -22773,7 +24844,6 @@ "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" } @@ -22784,6 +24854,11 @@ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -22801,14 +24876,12 @@ "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", @@ -22843,7 +24916,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, "requires": { "react-is": "^16.7.0" } @@ -22908,6 +24980,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", @@ -22930,6 +25010,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", @@ -22976,6 +25068,19 @@ "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.2.0", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", + "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==" + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -23113,6 +25218,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", @@ -23297,6 +25407,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -24685,6 +26800,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", @@ -24696,6 +26821,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", @@ -24709,8 +26839,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", @@ -24846,6 +26975,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", @@ -24888,6 +27022,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", @@ -25009,8 +27155,7 @@ "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 + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -25091,6 +27236,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", @@ -25284,6 +27437,21 @@ "entities": "^4.4.0" } }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "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", @@ -25314,6 +27482,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", @@ -25452,9 +27625,9 @@ "dev": true }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "peer": true, "requires": { @@ -25606,6 +27779,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", @@ -25724,6 +27906,32 @@ "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" + }, + "dependencies": { + "iconv-lite": { + "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" + } + } + } + }, "raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -25821,6 +28029,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", @@ -26002,8 +28219,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", @@ -26212,8 +28428,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", @@ -26300,6 +28515,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", @@ -26309,6 +28566,17 @@ "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", @@ -26331,6 +28599,11 @@ "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", @@ -26423,7 +28696,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", @@ -26500,6 +28772,51 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, + "socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + } + }, + "socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==" + }, + "socket.io-client": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-3.1.3.tgz", + "integrity": "sha512-4sIGOGOmCg3AOgGi7EEr6ZkTZRkrXwub70bBB/F0JSkMOUFpA77WsL87o34DffQQ31PkbMUIadGOk+3tx1KGbw==", + "requires": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~4.1.0", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, "socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -26550,9 +28867,9 @@ } }, "spacetrim": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.9.0.tgz", - "integrity": "sha512-sd9wQrg/NFeB0K9B1EHe9givtpuCZW5K4QHEkNCTcPAmpXqW1Rbt1OukZeoUapeDYQw2qtYCREHrMiEi8pSTHA==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.9.2.tgz", + "integrity": "sha512-ims+9jBfcwXwM7YTrO9+p5LB34Er0gpSuw6QpiI1q521Oz/YmRKJcyUqRoHPOrSG/GKejGZuKelDlvp8t15usw==" }, "spdx-correct": { "version": "3.2.0", @@ -26631,6 +28948,11 @@ "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", @@ -27114,6 +29436,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", @@ -27342,6 +29669,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", @@ -27439,12 +29775,22 @@ } } }, + "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==" + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "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", @@ -27506,6 +29852,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", @@ -27546,6 +29897,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", @@ -27565,6 +29921,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", @@ -27943,6 +30304,11 @@ "resolved": "https://registry.npmjs.org/xmldom-qsa/-/xmldom-qsa-1.1.3.tgz", "integrity": "sha512-IJBOczBpAYrIBJFFsmCBwfBhwe4zdMR3Xz0ZBX0OFtgO49rLy/BWbhkegOwsthdBWb1gUtFK6ZZnGdT8ZqPRBA==" }, + "xmlhttprequest-ssl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -28100,6 +30466,11 @@ "fd-slicer": "~1.1.0" } }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==" + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index 678d7df463..ec34fda913 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 ...", - "homepage": "https://1-2i.com/", + "description": "An AI-powered tool for web design", + "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,14 +54,23 @@ "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": { "@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", + "@faker-js/faker": "8.0.2", + "@promptbook/core": "0.9.0", + "@promptbook/execute-javascript": "0.9.0", + "@promptbook/openai": "0.9.0", + "@promptbook/types": "0.9.0", + "@promptbook/remote-client": "0.9.0", + "@promptbook/remote-server": "0.9.0", + "@promptbook/utils": "0.9.0", + "@promptbook/wizzard": "0.9.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", @@ -42,16 +79,19 @@ "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", - "insta-fetcher": "^1.3.26", + "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", "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", @@ -62,12 +102,15 @@ "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", "showdown": "2.1.0", "showdown-highlight": "3.1.0", - "spacetrim": "0.9.0", + "socket.io": "3.1.2", + "socket.io-client": "3.1.3", + "spacetrim": "0.9.2", "typescript": "4.9.4", "uuid": "9.0.0", "waitasecond": "1.11.1", @@ -79,6 +122,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", diff --git a/promptbook-server/TODO.txt b/promptbook-server/TODO.txt new file mode 100644 index 0000000000..7eff4fef7b --- /dev/null +++ b/promptbook-server/TODO.txt @@ -0,0 +1 @@ +TODO: What is the best location for this server - ptp library or this repository? \ No newline at end of file diff --git a/promptbook-server/ecosystem.config.js b/promptbook-server/ecosystem.config.js new file mode 100644 index 0000000000..f0e4f242b7 --- /dev/null +++ b/promptbook-server/ecosystem.config.js @@ -0,0 +1,11 @@ +module.exports = { + apps: [ + { + name: 'ptbk-server', + namespace: '1-2i', + script: 'ptp-server/server.bash', + exec_mode: 'fork', + interpreter: 'bash', + }, + ], +}; diff --git a/promptbook-server/server.bash b/promptbook-server/server.bash new file mode 100644 index 0000000000..9637564338 --- /dev/null +++ b/promptbook-server/server.bash @@ -0,0 +1,3 @@ +#!/bin/bash + +npx ts-node ptp-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..511cb5fd1f --- /dev/null +++ b/promptbook-server/server.ts @@ -0,0 +1,36 @@ +import * as dotenv from 'dotenv'; + +dotenv.config({ path: '.env' }); + +import { PromptTemplatePipelineLibrary } from '@promptbook/core'; +import { OpenAiExecutionTools } from '@promptbook/openai'; +import { createRemoteServer } 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'; + +const naturalExecutionTools = new OpenAiExecutionTools({ + isVerbose: IS_DEVELOPMENT /* <- Note: [3] */, + openAiApiKey: OPENAI_API_KEY!, +}); + +createRemoteServer({ + isVerbose: false /* <- Note: [3] We want server to be silent and OpenAiExecutionTools to be verbose */, + port: 4445 /* <- TODO: Unhardcode (all ports) */, + + ptbkLibrary: PromptTemplatePipelineLibrary.fromSources({ + /* <- TODO: [🎛] Use here real webgptPtpLibrary */ + }), + + createNaturalExecutionTools(clientId) { + return new SupabaseLoggerWrapperOfNaturalExecutionTools({ + isVerbose: false /* <- Note: [3] */, + naturalExecutionTools, + 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..bc3fd53462 --- /dev/null +++ b/promptbook/TODO.txt @@ -0,0 +1,3 @@ +TODO: Implement PTP Imports +TODO: [🧠] Maybe better to use: translate(en->cs)=>assigment=>translate(cs->en)=>write-website-content.ptbk.md=>translate(en->cs) +TODO: [🧠] Wording: Assigment, 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..37da49bc50 --- /dev/null +++ b/promptbook/other/enhance-text.cs.ptbk.md @@ -0,0 +1,31 @@ +# 📝 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 + +## 🖋 Vylepšení textu + +- Use completion + +``` +# Zadání pro zkušeného copywritera + +## Pravidla +- Výsledný text neobsahuje gramatické ani stylistické chyby +- Výsledný text zní profesionálně +- Výsledný text obsahuje bohatou slovní zásobu +- Výsledný text se významově neliší od surového textu +- Výsledný text má podobnou délku jako surový text + + +## Surový text: +{inputText} + +## Výsledný text: +``` + +`-> {outputText}` diff --git a/promptbook/promptbook.test.ts b/promptbook/promptbook.test.ts new file mode 100644 index 0000000000..22a562976d --- /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`, () => { + // list all .ptbk.md files in promptbooks folder + + const ptbkSources = readdirSync(join(__dirname, '..'), { withFileTypes: true }) + .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..d315644780 --- /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 `{rawAssigment}` 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 + +{rawAssigment} + +## 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..69409b31e6 --- /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 `{rawAssigment}` Request from the user what to change +- Output param `{newContent}` New content of the web + +## 🖋 Enhance the assigment + +- Use completion +- Postprocessing `spaceTrim` + +``` +Act as an experienced webdesigner and manager, you have a raw assigment from the user what to change on the web. +Make a proffesional assigment 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 assigment + +## Original assigment: +{rawAssigment} + +## Proffesional but short assigment: +``` + +`-> {proffesionalAssigment}` Proffesional looking request for change + +## 👤 Specifying the assigment + +- Prompt dialog + +It this the change you want to make? + +``` +{proffesionalAssigment} +``` + +`-> {finalAssigment}` Final request for change + +## 🖋 Apply assigment + +- Use completion +- Postprocessing `spaceTrim` + +``` +Act as an experienced copywriter and modify the markdown content of the page according to the user prompt. + +## Assigment: +{finalAssigment} + +## Original content: +{oldContent} + +## Content changed according to the assigment: +``` + +`-> {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..a464e97728 --- /dev/null +++ b/promptbook/write-website-content.cs.ptbk.md @@ -0,0 +1,285 @@ +# 🌍 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 `{rawTitle}` Automatický návrh názvu webu _v Angličtině_ nebo prázdný text +- Input param `{rawAssigment}` popis obrázku _v Angličtině_ +- Output param `{content}` Obsah webu _v Češtině_ + +## 🖋 Překlad popisu + +- Use completion +- Postprocessing `trim` + +```text + +English assignment: +> {rawAssigment} + +České zadání: +> +``` + +`-> {rawAssigmentCs}` popis obrázku v češtině + +## 🖋 Účel stránek + +- Use completion +- Postprocessing `unwrapResult` + +```markdown +Navrhni možný účel webových stránek z čistého popisu co se nachází na obrázku + +## Pravidla + +- Piš jediný návrh, neříkej "může to být toto nebo toto" +- 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" + +Text na obrázku: + +> {rawAssigmentCs} +``` + +`-> {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 + +## Text na obrázku + +{rawAssigmentCs} + +## Zadání webu v Češtině +``` + +`-> {draftedAssigment}` Zadání webu v Češtině + +## 👤 Upřesnění zadání uživatelem + +Popište cíl vašeho webu + +- Prompt dialog + +```text +{draftedAssigment} +``` + +`-> {assigment}` Zadání webu + +## 🖋 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 + +\`\`\` +{assigment} +\`\`\` + +## 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. + +## 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 + +```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 + +\`\`\` +{assigment} +\`\`\` + +## 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: + +\`\`\` +{assigment} +\`\`\` + +## 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 + +```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: + +\`\`\` +{assigment} +\`\`\` + +## 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..7d75efda1c --- /dev/null +++ b/promptbook/write-website-content.ptbk.md @@ -0,0 +1,173 @@ +# 🌍 Create website content + +Instructions for creating web page content using [🌠 Prompt template pipelines](https://github.com/webgptorg/promptbook). + +- PTBK URL https://ptbk.webgpt.com/en/write-website-content.ptbk.md@v0.1.0 +- PTBK version 0.0.1 +- Use chat + +- Input param `{rawTitle}` Automatically suggested a site name or empty text +- Input param `{rawAssigment}` Automatically generated site entry from image recognition +- Output param `{content}` Web content + +## 👤 Specifying the assigment + +What is your web about? + +- Prompt dialog + +```text +{rawAssigment} +``` + +`-> {assigment}` Website assignment and specification + +## 💬 Improvement of the web title + +- Postprocessing `unwrapResult` + +```markdown +As an experienced marketing specialist, you have been entrusted with improving the name of your client's business. + +A suggested name from a client: +"{rawTitle}" + +Assignment from customer: + +\`\`\` +{assigment} +\`\`\` + +## Instructions: + +- Write only one name suggestion +- The name will be used on the website, business cards, visuals, etc. +``` + +`-> {enhancedTitle}` Enhanced title + +## 👤 Schválení názvu uživatelem + +Is the title for your website okay? + +- Prompt dialog + +```text +{enhancedTitle} +``` + +`-> {title}` Title for the website + +## 💬 Cunning subtitle + +- Postprocessing `unwrapResult` + +```markdown +As an experienced copywriter, you have been entrusted with creating a claim for the "{title}" web page. + +A website assignment from a customer: + +\`\`\` +{assigment} +\`\`\` + +## Instructions: + +- Write only one name suggestion +- Claim will be used on website, business cards, visuals, etc. +- Claim should be punchy, funny, original +``` + +`-> {claim}` Claim for the web + +## 💬 Keyword analysis + + + +```markdown +As an experienced SEO specialist, you have been entrusted with creating keywords for the website "{title}". + +Website assignment from the customer: + +\`\`\` +{assigment} +\`\`\` + +## Instructions: + +- Write a list of keywords +- Keywords are in basic form + +## Example: + +- Ice cream +- Olomouc +- Quality +- Family +- Tradition +- Italy +- Craft +``` + +`-> {keywords}` Keywords + +## 🔗 Vytvoření začátku obsahu webu + +- Simple template + +```text + +# {title} + +> {claim} + +``` + +`-> {contentBeginning}` Beginning of web content + +## 🖋 Writing web content + +- Use completion + + +```markdown +As an experienced copywriter and web designer, you have been entrusted with creating text for a new website {title}. + +A website assignment from a customer: + +\`\`\` +{assigment} +\`\`\` + +## Instructions: + +- Text formatting is in Markdown +- Be concise and to the point +- 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}` Middle of the web content + +## 🔗 Combine content + +- Simple template + +```markdown +{contentBeginning} + +{contentBody} +``` + +`-> {content}` 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 new file mode 100644 index 0000000000..a2d3a23fac --- /dev/null +++ b/public/logo/webgpt.white.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 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/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/playground/playground.ts b/scripts/playground/playground.ts index 86e76fee1b..16e9f176b0 100644 --- a/scripts/playground/playground.ts +++ b/scripts/playground/playground.ts @@ -1,13 +1,14 @@ #!/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 +29,68 @@ async function playground() { console.info(`🧸 Playground`); // Do here stuff you want to test + //========================================> + + const openai = new OpenAI({ + apiKey: OPENAI_API_KEY, + }); - const completion = await getOpenaiForServer().completions.create({ - model: 'text-davinci-003', + const rawResponse = await openai.completions.create({ + model: 'gpt-3.5-turbo-instruct', max_tokens: 1000, prompt: spaceTrim(` + + Jako zkušenému copywriterovi a webdesignérovi vám bylo svěřeno vytvoření textu pro novou webovou stránku Nestvořené dětské světy. - Following is markdown content of a webpage: - - # Urban Oasis - - > Embracing Nature Amidst the Cityscape - - + Zadání webu od zákazníka: + + \`\`\` + dítě sedí na zemi + \`\`\` + + ## Pokyny: + + - Formátování textu je v Markdownu + - Buďte struční a výstižní + - 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: + + - Děti + - Svět + - Kreativita + - Hračky + - Fantazie + - Vytváření + - Prostor + - Hraní + - Inovace + - Rozvoj + - Představivost + - Herní plocha + - Design + - Hry + - Zábava + - Interaktivita + - Stimulace + - Vzdělání + - Dětský pokoj + - Hra + + ## Obsah webu: + + + # Nestvořené dětské světy + + > Domačtěte dětem svět, který nebyl ještě vymyšlený! + `), }); - // console.log({ completion }, completion.choices); + + console.log(rawResponse); + //========================================/ 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..e7b7032143 100644 --- a/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts +++ b/scripts/utils/hardcoded-wallpaper/getHardcodedWallpapers.ts @@ -20,10 +20,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; } /** diff --git a/scripts/utils/organizeImports.ts b/scripts/utils/organizeImports.ts index 4a3ed887b0..634dfdc46b 100644 --- a/scripts/utils/organizeImports.ts +++ b/scripts/utils/organizeImports.ts @@ -2,6 +2,12 @@ import { mkdir, readFile, writeFile } from 'fs/promises'; import { dirname, join } from 'path'; import { execCommand } from './execCommand/execCommand'; +/** + * Organizes the imports of a typescript file + * + * @param fileContents contents of the typescript file + * @returns the file contents with organized imports + */ export async function organizeImports(fileContents: string): 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/getExecutionTools.ts b/src/ai/prompt-templates/getExecutionTools.ts new file mode 100644 index 0000000000..6929e25ce3 --- /dev/null +++ b/src/ai/prompt-templates/getExecutionTools.ts @@ -0,0 +1,78 @@ +import { CallbackInterfaceTools } from '@promptbook/core'; +import { JavascriptEvalExecutionTools } from '@promptbook/execute-javascript'; +import { RemoteNaturalExecutionTools } from '@promptbook/remote-client'; +import { ExecutionTools } from '@promptbook/types'; +import spaceTrim from 'spacetrim'; +import { IS_DEVELOPMENT, NEXT_PUBLIC_PROMPTBOOK_SERVER_URL } from '../../../config'; +import { promptDialogue } from '../../components/Dialogues/dialogues/promptDialogue'; +import { isRunningInBrowser, isRunningInWebWorker } from '../../utils/isRunningInWhatever'; +import { uuid } from '../../utils/typeAliases'; + +/** + * 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, + clientId, + }), + script: [ + new JavascriptEvalExecutionTools(/* <- TODO: !! Change to JavascriptExecutionTools */ { isVerbose }), + ], + 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++) { + answer = await promptDialogue({ + ...options, + prompt: i === 0 ? options.prompt : options.prompt + ` (You need to put 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..36c4d25bba --- /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 assigment: 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-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/TODO.txt b/src/components/AiComponents/TODO.txt new file mode 100644 index 0000000000..8b45580009 --- /dev/null +++ b/src/components/AiComponents/TODO.txt @@ -0,0 +1 @@ +TODO: Rename to WebGPT components \ No newline at end of file diff --git a/src/components/AppHead/StaticAppHead.tsx b/src/components/AppHead/StaticAppHead.tsx index 1eed6ef9df..e2e8080728 100644 --- a/src/components/AppHead/StaticAppHead.tsx +++ b/src/components/AppHead/StaticAppHead.tsx @@ -18,8 +18,8 @@ export function StaticAppHead(props: StaticAppHeadProps) { const { subtitle } = props; // TODO: !! Use translation - const title = (subtitle ? subtitle + ' 🎨 ' : '') + `AI Web Maker`; - const description = `Thousands of AI generated web designs`; + const title = (subtitle ? subtitle + ' ⏣ ' : '') + `WebGPT`; + const description = `Do you want to make a web or have a web?`; return ( <> diff --git a/src/components/AppHead/WallpaperAppHead.tsx b/src/components/AppHead/WallpaperAppHead.tsx index 01153f8da0..3244f726a7 100644 --- a/src/components/AppHead/WallpaperAppHead.tsx +++ b/src/components/AppHead/WallpaperAppHead.tsx @@ -29,7 +29,7 @@ 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 */ || - 'The page was created by 1-2i.com'; + 'The page was created by webgpt.cz'; const homeUrl = `${publicUrl.href}${wallpaper.id}`; /* <- TODO: Self URL into some configuration */ @@ -112,10 +112,10 @@ export function WallpaperAppHead(props: WallpaperAppHeadProps) { [🔌] This is a registration script for the page ${publicUrl} You need to visit at least once the site ${publicUrl} to register it - Or register manually at https://1-2i.com/${wallpaper.id}?modal=export + Or register manually at https://webgpt.cz/${wallpaper.id}?modal=export After the registration you can remove this section or leave it here for future updates - For more info see https://1-2i.com/${wallpaper.id}?page=license + For more info see https://webgpt.cz/${wallpaper.id}?page=license `} > diff --git a/src/components/ColorsPanel/ColorsPanel.tsx b/src/components/ColorsPanel/ColorsPanel.tsx index db0952631a..87485e4785 100644 --- a/src/components/ColorsPanel/ColorsPanel.tsx +++ b/src/components/ColorsPanel/ColorsPanel.tsx @@ -52,7 +52,7 @@ export function ColorsPanel() { return (

{/*
{wallpaperId}
*/}
@@ -97,7 +97,7 @@ export function ControlPanel() { )} {/* - Note: In the + TODO: [🧠] What is the best way how to navigate home? {wallpaperId}
*/} {(['LOVE', 'LIKE'].includes(likedStatus) || wallpaper.author === provideClientIdWithoutVerification()) && (
- - Get the web - +
)} diff --git a/src/components/ControlPanel/RandomWallpaper/RandomWallpaperButton.tsx b/src/components/ControlPanel/RandomWallpaper/RandomWallpaperButton.tsx index e1f81045fa..b3e80ad538 100644 --- a/src/components/ControlPanel/RandomWallpaper/RandomWallpaperButton.tsx +++ b/src/components/ControlPanel/RandomWallpaper/RandomWallpaperButton.tsx @@ -1,7 +1,7 @@ import Image from 'next/image'; -import Link from 'next/link'; import { classNames } from '../../../utils/classNames'; import { Hint } from '../../Hint/Hint'; +import { WallpaperLink } from '../../WallpaperLink/WallpaperLink'; import styles from '../ControlPanel.module.css'; import { useRandomWallpaper } from './useRandomWallpaper'; @@ -29,12 +29,10 @@ export function RandomWallpaperButton() { return ( - {/* */} - {' '} + ); } 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..03471a239c 100644 --- a/src/components/CopilotInput/CopilotInput.tsx +++ b/src/components/CopilotInput/CopilotInput.tsx @@ -4,7 +4,7 @@ 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 { message, string_prompt } from '../../utils/typeAliases'; import { TorusInteractiveImage } from '../TaskInProgress/TorusInteractiveImage'; import styles from './CopilotInput.module.css'; @@ -12,7 +12,7 @@ interface useRouterProps { /** * Label for the input */ - label: string; + label: message; /** * The html comment to export @@ -66,7 +66,7 @@ export function CopilotInput(props: useRouterProps) { }, [inputRef, onPrompt, isRunning]); return ( -
+
* { - /*/ - outline: 1px dotted rgb(56, 255, 38) !important; - /**/ -} + .CopilotPanel input { /*/ @@ -166,18 +162,38 @@ .CopilotPanel nav.MenuContent li { /*/ - outline: 1px solid #0000ff; + outline: 1px solid #0000ff !important; /**/ list-style: none; - text-align: right; + padding: 0; margin: 0; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 15px; - padding-right: 15px; + border-bottom: 1px solid rgba(255, 255, 255, 0.3); color: rgba(255, 255, 255, 0.8); + + display: grid; + grid-template-areas: '⏣ menuitem'; + grid-template-columns: 30px 1fr; + + width: 100%; + height: 40px; +} + +.CopilotPanel nav.MenuContent li.auto::before { + /*/ + outline: 1px solid #0000ff !important; + /**/ + + grid-area: ⏣; + opacity: 0.5; + content: '⏣'; + width: max-content; + + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; } .CopilotPanel nav.MenuContent li:last-child { @@ -196,22 +212,28 @@ background-color: rgba(146, 248, 255, 0.2); } -.CopilotPanel nav.MenuContent li { - display: block; +.CopilotPanel nav.MenuContent li a, +.CopilotPanel nav.MenuContent li button { + /*/ + outline: 1px solid #bbff00 !important; + /**/ + + grid-area: menuitem; + margin: 0; - padding: 7px; - padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 15px; + padding-right: 15px; + color: inherit; font-size: 20px; text-decoration: none; - cursor: pointer; -} - -.CopilotPanel nav.MenuContent li a { - margin: 0; - padding: 0; - text-decoration: none; color: inherit; + background-color: transparent; + border: none; + outline: none; + text-align: right; } .CopilotPanel nav.MenuContent li:hover { diff --git a/src/components/CopilotPanel/CopilotPanel.tsx b/src/components/CopilotPanel/CopilotPanel.tsx index 6edfb82202..13922a3e9b 100644 --- a/src/components/CopilotPanel/CopilotPanel.tsx +++ b/src/components/CopilotPanel/CopilotPanel.tsx @@ -1,25 +1,32 @@ 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, IS_VERIFIED_EMAIL_REQUIRED } from '../../../config'; -import type { - UpdateWallpaperContentRequest, - UpdateWallpaperContentResponse, -} from '../../pages/api/update-wallpaper-content'; +import { COPILOT_PLACEHOLDERS, FONTS, IS_VERIFIED_EMAIL_REQUIRED } from '../../../config'; +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 { parseKeywordsFromWallpaper } from '../Gallery/GalleryFilter/utils/parseKeywordsFromWallpaper'; import { Hint } from '../Hint/Hint'; +import { addFontToContent } from '../ImportFonts/addFontToContent'; +import { changeFontsInContent } from '../ImportFonts/changeFontInContent'; +import { extractFontsFromContent } from '../ImportFonts/extractFontsFromContent'; +import { ImportFonts } from '../ImportFonts/ImportFonts'; +import { PublishLink } from '../PublishModal/PublishLink'; import { TorusInteractiveImage } from '../TaskInProgress/TorusInteractiveImage'; import { WallpaperLink } from '../WallpaperLink/WallpaperLink'; import styles from './CopilotPanel.module.css'; @@ -29,12 +36,26 @@ import styles from './CopilotPanel.module.css'; */ 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 */ const inputRef = useRef(null); const placeholders = useMemo(() => shuffleItems(...COPILOT_PLACEHOLDERS), []); const placeholder = useRotatingPlaceholder(...placeholders); + 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); + modifiedWallpaper.saveStage = 'EDITED'; + return modifiedWallpaper; + }); + }, [modifyWallpaper, randomFont]); const handlePrompt = useCallback(async () => { if (runningPrompt !== null) { @@ -66,38 +87,71 @@ export function CopilotPanel() { `), ); - const { content: oldContent } = wallpaper; + let { content: oldContent } = wallpaper; + + 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 response = await fetch( - `/api/update-wallpaper-content?clientId=${await provideClientId({ - isVerifiedEmailRequired: IS_VERIFIED_EMAIL_REQUIRED.EDIT, - })}`, + 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), - signal: AbortSignal.timeout(60000 /* <- TODO: Maybe in sync with vercel.json */), + oldContent, + rawAssigment: 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(newContent || '', font); + + /*/ + const newContentWithMetadata = spaceTrim( + (block) => ` + ${block(newContentWithFont)} - const { - updatedWallpaper: { content: newContent }, - } = (await response.json()) as UpdateWallpaperContentResponse; + --- - console.info({ oldContent, newContent }); +
+ + ## Old content: + + ${block(oldContent)} + +
+ `, // <- TODO: !! Just newContent, maybe use this in some debug mode + ); + /**/ + /**/ + const newContentWithMetadata = newContentWithFont; + /**/ + + 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); @@ -120,7 +174,7 @@ export function CopilotPanel() { }, [router, wallpaper, modifyWallpaper, runningPrompt, inputRef]); return ( -
+
{wallpaper.saveStage === 'EDITED' && ( // TODO: [🌨] DRY - Maybe or saveWallpaper() function -
  • { - const clientId = await provideClientId({ - isVerifiedEmailRequired: IS_VERIFIED_EMAIL_REQUIRED.EDIT, - }); - 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.author = clientId; - modifiedWallpaper.isPublic = false; - modifiedWallpaper.saveStage = 'SAVING'; - modifiedWallpaper.keywords = Array.from( - parseKeywordsFromWallpaper(modifiedWallpaper), - ); - modifiedWallpaper.id = computeWallpaperUriid(modifiedWallpaper); - return modifiedWallpaper; - }); +
  • +
  • )}
  • - - Get the web - +
  • @@ -271,6 +320,16 @@ export function CopilotPanel() { {/* <- TODO: Should be here "Edit markdown" or "Edit content" */}
  • +
  • + */ + /> + +
  • +
  • + 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 - [~] Support + + [🧠] How to do all of this in gallery scenario? +
  • Contact 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..c40e9f8618 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 { 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 ( -
    -