a homebrewed DnD campaign based in the Honkai: Star Rail universe
hsr honkaistarrail dnd

chore: refine supabase setup (#104)

authored by samanthanguyen.me and committed by

GitHub 5097ad0c d6b4581c

+921 -3
+1
.gitattributes
··· 11 11 12 12 # generated files 13 13 app/worker-configuration.d.ts linguist-generated 14 + app/src/database.types.ts linguist-generated
+2 -1
.github/dependabot.yml
··· 35 35 - '@tanstack/svelte-table' 36 36 frontend-backend: 37 37 patterns: 38 - - '@cloudflare/*' 39 38 - 'tailwind-*' 40 39 - 'tailwindcss' 41 40 - '@tailwindcss/*' ··· 43 42 - 'lorem-ipsum' 44 43 - 'supabase' 45 44 - '@supabase/*' 45 + - 'zod' 46 + - 'wrangler' 46 47 voidzero-vite: 47 48 patterns: 48 49 - 'eslint-plugin-svelte'
+4 -1
app/package.json
··· 18 18 "chromatic": "chromatic --exit-zero-on-changes", 19 19 "test": "vitest", 20 20 "test-ui": "vitest --ui", 21 - "cloudflare-types": "wrangler types" 21 + "cloudflare-types": "wrangler types", 22 + "supabase-types": "supabase gen types typescript --project-id xprhwuzivafsybqhhpqq --schema public > src/database.types.ts && npm run fmt", 23 + "supabase-types-local": "supabase gen types typescript --local > src/database.types.ts && npm run fmt" 22 24 }, 23 25 "dependencies": { 24 26 "@lucide/svelte": "^0.562.0", ··· 46 48 "lightningcss": "^1.30.2", 47 49 "mdsvex": "^0.12.6", 48 50 "playwright": "^1.56.1", 51 + "supabase": "^2.67.3", 49 52 "svelte": "^5.46.0", 50 53 "svelte-check": "^4.3.3", 51 54 "tailwindcss": "^4.1.17",
+223
app/src/database.types.ts
··· 1 + export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[] 2 + 3 + export type Database = { 4 + // Allows to automatically instantiate createClient with right options 5 + // instead of createClient<Database, { PostgrestVersion: 'XX' }>(URL, KEY) 6 + __InternalSupabase: { 7 + PostgrestVersion: '13.0.5' 8 + } 9 + public: { 10 + Tables: { 11 + character: { 12 + Row: { 13 + age: number 14 + created_at: string 15 + credits: number 16 + height: number | null 17 + id: number 18 + level: number 19 + name: string 20 + species_id: number | null 21 + weight: number | null 22 + } 23 + Insert: { 24 + age: number 25 + created_at?: string 26 + credits?: number 27 + height?: number | null 28 + id?: number 29 + level: number 30 + name: string 31 + species_id?: number | null 32 + weight?: number | null 33 + } 34 + Update: { 35 + age?: number 36 + created_at?: string 37 + credits?: number 38 + height?: number | null 39 + id?: number 40 + level?: number 41 + name?: string 42 + species_id?: number | null 43 + weight?: number | null 44 + } 45 + Relationships: [ 46 + { 47 + foreignKeyName: 'character_species_id_fkey' 48 + columns: ['species_id'] 49 + isOneToOne: false 50 + referencedRelation: 'species' 51 + referencedColumns: ['id'] 52 + }, 53 + ] 54 + } 55 + species: { 56 + Row: { 57 + id: number 58 + name: string 59 + } 60 + Insert: { 61 + id?: number 62 + name: string 63 + } 64 + Update: { 65 + id?: number 66 + name?: string 67 + } 68 + Relationships: [] 69 + } 70 + users: { 71 + Row: { 72 + auth_id: string | null 73 + id: number 74 + username: string 75 + } 76 + Insert: { 77 + auth_id?: string | null 78 + id?: number 79 + username: string 80 + } 81 + Update: { 82 + auth_id?: string | null 83 + id?: number 84 + username?: string 85 + } 86 + Relationships: [] 87 + } 88 + } 89 + Views: { 90 + [_ in never]: never 91 + } 92 + Functions: { 93 + [_ in never]: never 94 + } 95 + Enums: { 96 + [_ in never]: never 97 + } 98 + CompositeTypes: { 99 + [_ in never]: never 100 + } 101 + } 102 + } 103 + 104 + type DatabaseWithoutInternals = Omit<Database, '__InternalSupabase'> 105 + 106 + type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, 'public'>] 107 + 108 + export type Tables< 109 + DefaultSchemaTableNameOrOptions extends 110 + | keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) 111 + | { schema: keyof DatabaseWithoutInternals }, 112 + TableName extends DefaultSchemaTableNameOrOptions extends { 113 + schema: keyof DatabaseWithoutInternals 114 + } 115 + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & 116 + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views']) 117 + : never = never, 118 + > = DefaultSchemaTableNameOrOptions extends { 119 + schema: keyof DatabaseWithoutInternals 120 + } 121 + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & 122 + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views'])[TableName] extends { 123 + Row: infer R 124 + } 125 + ? R 126 + : never 127 + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) 128 + ? (DefaultSchema['Tables'] & DefaultSchema['Views'])[DefaultSchemaTableNameOrOptions] extends { 129 + Row: infer R 130 + } 131 + ? R 132 + : never 133 + : never 134 + 135 + export type TablesInsert< 136 + DefaultSchemaTableNameOrOptions extends 137 + | keyof DefaultSchema['Tables'] 138 + | { schema: keyof DatabaseWithoutInternals }, 139 + TableName extends DefaultSchemaTableNameOrOptions extends { 140 + schema: keyof DatabaseWithoutInternals 141 + } 142 + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] 143 + : never = never, 144 + > = DefaultSchemaTableNameOrOptions extends { 145 + schema: keyof DatabaseWithoutInternals 146 + } 147 + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { 148 + Insert: infer I 149 + } 150 + ? I 151 + : never 152 + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] 153 + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { 154 + Insert: infer I 155 + } 156 + ? I 157 + : never 158 + : never 159 + 160 + export type TablesUpdate< 161 + DefaultSchemaTableNameOrOptions extends 162 + | keyof DefaultSchema['Tables'] 163 + | { schema: keyof DatabaseWithoutInternals }, 164 + TableName extends DefaultSchemaTableNameOrOptions extends { 165 + schema: keyof DatabaseWithoutInternals 166 + } 167 + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] 168 + : never = never, 169 + > = DefaultSchemaTableNameOrOptions extends { 170 + schema: keyof DatabaseWithoutInternals 171 + } 172 + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { 173 + Update: infer U 174 + } 175 + ? U 176 + : never 177 + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] 178 + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { 179 + Update: infer U 180 + } 181 + ? U 182 + : never 183 + : never 184 + 185 + export type Enums< 186 + DefaultSchemaEnumNameOrOptions extends 187 + | keyof DefaultSchema['Enums'] 188 + | { schema: keyof DatabaseWithoutInternals }, 189 + EnumName extends DefaultSchemaEnumNameOrOptions extends { 190 + schema: keyof DatabaseWithoutInternals 191 + } 192 + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'] 193 + : never = never, 194 + > = DefaultSchemaEnumNameOrOptions extends { 195 + schema: keyof DatabaseWithoutInternals 196 + } 197 + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'][EnumName] 198 + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema['Enums'] 199 + ? DefaultSchema['Enums'][DefaultSchemaEnumNameOrOptions] 200 + : never 201 + 202 + export type CompositeTypes< 203 + PublicCompositeTypeNameOrOptions extends 204 + | keyof DefaultSchema['CompositeTypes'] 205 + | { schema: keyof DatabaseWithoutInternals }, 206 + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { 207 + schema: keyof DatabaseWithoutInternals 208 + } 209 + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'] 210 + : never = never, 211 + > = PublicCompositeTypeNameOrOptions extends { 212 + schema: keyof DatabaseWithoutInternals 213 + } 214 + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] 215 + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] 216 + ? DefaultSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] 217 + : never 218 + 219 + export const Constants = { 220 + public: { 221 + Enums: {}, 222 + }, 223 + } as const
+2 -1
app/src/lib/supabaseClient.ts
··· 1 1 import { createClient } from '@supabase/supabase-js' 2 2 import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' 3 + import type { Database } from '../database.types.ts' 3 4 4 5 const supabaseUrl = PUBLIC_SUPABASE_URL 5 6 const supabaseKey = PUBLIC_SUPABASE_ANON_KEY 6 7 7 - export const supabase = createClient(supabaseUrl, supabaseKey) 8 + export const supabase = createClient<Database>(supabaseUrl, supabaseKey)
+8
app/supabase/.gitignore
··· 1 + # Supabase 2 + .branches 3 + .temp 4 + 5 + # dotenvx 6 + .env.keys 7 + .env.local 8 + .env.*.local
+382
app/supabase/config.toml
··· 1 + # For detailed configuration reference documentation, visit: 2 + # https://supabase.com/docs/guides/local-development/cli/config 3 + # A string used to distinguish different Supabase projects on the same host. Defaults to the 4 + # working directory name when running `supabase init`. 5 + project_id = "app" 6 + 7 + [api] 8 + enabled = true 9 + # Port to use for the API URL. 10 + port = 54321 11 + # Schemas to expose in your API. Tables, views and stored procedures in this schema will get API 12 + # endpoints. `public` and `graphql_public` schemas are included by default. 13 + schemas = ["public", "graphql_public"] 14 + # Extra schemas to add to the search_path of every request. 15 + extra_search_path = ["public", "extensions"] 16 + # The maximum number of rows returns from a view, table, or stored procedure. Limits payload size 17 + # for accidental or malicious requests. 18 + max_rows = 1000 19 + 20 + [api.tls] 21 + # Enable HTTPS endpoints locally using a self-signed certificate. 22 + enabled = false 23 + # Paths to self-signed certificate pair. 24 + # cert_path = "../certs/my-cert.pem" 25 + # key_path = "../certs/my-key.pem" 26 + 27 + [db] 28 + # Port to use for the local database URL. 29 + port = 54322 30 + # Port used by db diff command to initialize the shadow database. 31 + shadow_port = 54320 32 + # The database major version to use. This has to be the same as your remote database's. Run `SHOW 33 + # server_version;` on the remote database to check. 34 + major_version = 17 35 + 36 + [db.pooler] 37 + enabled = false 38 + # Port to use for the local connection pooler. 39 + port = 54329 40 + # Specifies when a server connection can be reused by other clients. 41 + # Configure one of the supported pooler modes: `transaction`, `session`. 42 + pool_mode = "transaction" 43 + # How many server connections to allow per user/database pair. 44 + default_pool_size = 20 45 + # Maximum number of client connections allowed. 46 + max_client_conn = 100 47 + 48 + # [db.vault] 49 + # secret_key = "env(SECRET_VALUE)" 50 + 51 + [db.migrations] 52 + # If disabled, migrations will be skipped during a db push or reset. 53 + enabled = true 54 + # Specifies an ordered list of schema files that describe your database. 55 + # Supports glob patterns relative to supabase directory: "./schemas/*.sql" 56 + schema_paths = [] 57 + 58 + [db.seed] 59 + # If enabled, seeds the database after migrations during a db reset. 60 + enabled = true 61 + # Specifies an ordered list of seed files to load during db reset. 62 + # Supports glob patterns relative to supabase directory: "./seeds/*.sql" 63 + sql_paths = ["./seed.sql"] 64 + 65 + [db.network_restrictions] 66 + # Enable management of network restrictions. 67 + enabled = false 68 + # List of IPv4 CIDR blocks allowed to connect to the database. 69 + # Defaults to allow all IPv4 connections. Set empty array to block all IPs. 70 + allowed_cidrs = ["0.0.0.0/0"] 71 + # List of IPv6 CIDR blocks allowed to connect to the database. 72 + # Defaults to allow all IPv6 connections. Set empty array to block all IPs. 73 + allowed_cidrs_v6 = ["::/0"] 74 + 75 + [realtime] 76 + enabled = true 77 + # Bind realtime via either IPv4 or IPv6. (default: IPv4) 78 + # ip_version = "IPv6" 79 + # The maximum length in bytes of HTTP request headers. (default: 4096) 80 + # max_header_length = 4096 81 + 82 + [studio] 83 + enabled = true 84 + # Port to use for Supabase Studio. 85 + port = 54323 86 + # External URL of the API server that frontend connects to. 87 + api_url = "http://127.0.0.1" 88 + # OpenAI API Key to use for Supabase AI in the Supabase Studio. 89 + openai_api_key = "env(OPENAI_API_KEY)" 90 + 91 + # Email testing server. Emails sent with the local dev setup are not actually sent - rather, they 92 + # are monitored, and you can view the emails that would have been sent from the web interface. 93 + [inbucket] 94 + enabled = true 95 + # Port to use for the email testing server web interface. 96 + port = 54324 97 + # Uncomment to expose additional ports for testing user applications that send emails. 98 + # smtp_port = 54325 99 + # pop3_port = 54326 100 + # admin_email = "admin@email.com" 101 + # sender_name = "Admin" 102 + 103 + [storage] 104 + enabled = true 105 + # The maximum file size allowed (e.g. "5MB", "500KB"). 106 + file_size_limit = "50MiB" 107 + 108 + # Uncomment to configure local storage buckets 109 + # [storage.buckets.images] 110 + # public = false 111 + # file_size_limit = "50MiB" 112 + # allowed_mime_types = ["image/png", "image/jpeg"] 113 + # objects_path = "./images" 114 + 115 + # Allow connections via S3 compatible clients 116 + [storage.s3_protocol] 117 + enabled = true 118 + 119 + # Image transformation API is available to Supabase Pro plan. 120 + # [storage.image_transformation] 121 + # enabled = true 122 + 123 + # Store analytical data in S3 for running ETL jobs over Iceberg Catalog 124 + # This feature is only available on the hosted platform. 125 + [storage.analytics] 126 + enabled = false 127 + max_namespaces = 5 128 + max_tables = 10 129 + max_catalogs = 2 130 + 131 + # Analytics Buckets is available to Supabase Pro plan. 132 + # [storage.analytics.buckets.my-warehouse] 133 + 134 + # Store vector embeddings in S3 for large and durable datasets 135 + # This feature is only available on the hosted platform. 136 + [storage.vector] 137 + enabled = false 138 + max_buckets = 10 139 + max_indexes = 5 140 + 141 + # Vector Buckets is available to Supabase Pro plan. 142 + # [storage.vector.buckets.documents-openai] 143 + 144 + [auth] 145 + enabled = true 146 + # The base URL of your website. Used as an allow-list for redirects and for constructing URLs used 147 + # in emails. 148 + site_url = "http://127.0.0.1:3000" 149 + # A list of *exact* URLs that auth providers are permitted to redirect to post authentication. 150 + additional_redirect_urls = ["https://127.0.0.1:3000"] 151 + # How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). 152 + jwt_expiry = 3600 153 + # JWT issuer URL. If not set, defaults to the local API URL (http://127.0.0.1:<port>/auth/v1). 154 + # jwt_issuer = "" 155 + # Path to JWT signing key. DO NOT commit your signing keys file to git. 156 + # signing_keys_path = "./signing_keys.json" 157 + # If disabled, the refresh token will never expire. 158 + enable_refresh_token_rotation = true 159 + # Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. 160 + # Requires enable_refresh_token_rotation = true. 161 + refresh_token_reuse_interval = 10 162 + # Allow/disallow new user signups to your project. 163 + enable_signup = true 164 + # Allow/disallow anonymous sign-ins to your project. 165 + enable_anonymous_sign_ins = false 166 + # Allow/disallow testing manual linking of accounts 167 + enable_manual_linking = false 168 + # Passwords shorter than this value will be rejected as weak. Minimum 6, recommended 8 or more. 169 + minimum_password_length = 6 170 + # Passwords that do not meet the following requirements will be rejected as weak. Supported values 171 + # are: `letters_digits`, `lower_upper_letters_digits`, `lower_upper_letters_digits_symbols` 172 + password_requirements = "" 173 + 174 + [auth.rate_limit] 175 + # Number of emails that can be sent per hour. Requires auth.email.smtp to be enabled. 176 + email_sent = 2 177 + # Number of SMS messages that can be sent per hour. Requires auth.sms to be enabled. 178 + sms_sent = 30 179 + # Number of anonymous sign-ins that can be made per hour per IP address. Requires enable_anonymous_sign_ins = true. 180 + anonymous_users = 30 181 + # Number of sessions that can be refreshed in a 5 minute interval per IP address. 182 + token_refresh = 150 183 + # Number of sign up and sign-in requests that can be made in a 5 minute interval per IP address (excludes anonymous users). 184 + sign_in_sign_ups = 30 185 + # Number of OTP / Magic link verifications that can be made in a 5 minute interval per IP address. 186 + token_verifications = 30 187 + # Number of Web3 logins that can be made in a 5 minute interval per IP address. 188 + web3 = 30 189 + 190 + # Configure one of the supported captcha providers: `hcaptcha`, `turnstile`. 191 + # [auth.captcha] 192 + # enabled = true 193 + # provider = "hcaptcha" 194 + # secret = "" 195 + 196 + [auth.email] 197 + # Allow/disallow new user signups via email to your project. 198 + enable_signup = true 199 + # If enabled, a user will be required to confirm any email change on both the old, and new email 200 + # addresses. If disabled, only the new email is required to confirm. 201 + double_confirm_changes = true 202 + # If enabled, users need to confirm their email address before signing in. 203 + enable_confirmations = false 204 + # If enabled, users will need to reauthenticate or have logged in recently to change their password. 205 + secure_password_change = false 206 + # Controls the minimum amount of time that must pass before sending another signup confirmation or password reset email. 207 + max_frequency = "1s" 208 + # Number of characters used in the email OTP. 209 + otp_length = 6 210 + # Number of seconds before the email OTP expires (defaults to 1 hour). 211 + otp_expiry = 3600 212 + 213 + # Use a production-ready SMTP server 214 + # [auth.email.smtp] 215 + # enabled = true 216 + # host = "smtp.sendgrid.net" 217 + # port = 587 218 + # user = "apikey" 219 + # pass = "env(SENDGRID_API_KEY)" 220 + # admin_email = "admin@email.com" 221 + # sender_name = "Admin" 222 + 223 + # Uncomment to customize email template 224 + # [auth.email.template.invite] 225 + # subject = "You have been invited" 226 + # content_path = "./supabase/templates/invite.html" 227 + 228 + # Uncomment to customize notification email template 229 + # [auth.email.notification.password_changed] 230 + # enabled = true 231 + # subject = "Your password has been changed" 232 + # content_path = "./templates/password_changed_notification.html" 233 + 234 + [auth.sms] 235 + # Allow/disallow new user signups via SMS to your project. 236 + enable_signup = false 237 + # If enabled, users need to confirm their phone number before signing in. 238 + enable_confirmations = false 239 + # Template for sending OTP to users 240 + template = "Your code is {{ .Code }}" 241 + # Controls the minimum amount of time that must pass before sending another sms otp. 242 + max_frequency = "5s" 243 + 244 + # Use pre-defined map of phone number to OTP for testing. 245 + # [auth.sms.test_otp] 246 + # 4152127777 = "123456" 247 + 248 + # Configure logged in session timeouts. 249 + # [auth.sessions] 250 + # Force log out after the specified duration. 251 + # timebox = "24h" 252 + # Force log out if the user has been inactive longer than the specified duration. 253 + # inactivity_timeout = "8h" 254 + 255 + # This hook runs before a new user is created and allows developers to reject the request based on the incoming user object. 256 + # [auth.hook.before_user_created] 257 + # enabled = true 258 + # uri = "pg-functions://postgres/auth/before-user-created-hook" 259 + 260 + # This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. 261 + # [auth.hook.custom_access_token] 262 + # enabled = true 263 + # uri = "pg-functions://<database>/<schema>/<hook_name>" 264 + 265 + # Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. 266 + [auth.sms.twilio] 267 + enabled = false 268 + account_sid = "" 269 + message_service_sid = "" 270 + # DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: 271 + auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" 272 + 273 + # Multi-factor-authentication is available to Supabase Pro plan. 274 + [auth.mfa] 275 + # Control how many MFA factors can be enrolled at once per user. 276 + max_enrolled_factors = 10 277 + 278 + # Control MFA via App Authenticator (TOTP) 279 + [auth.mfa.totp] 280 + enroll_enabled = false 281 + verify_enabled = false 282 + 283 + # Configure MFA via Phone Messaging 284 + [auth.mfa.phone] 285 + enroll_enabled = false 286 + verify_enabled = false 287 + otp_length = 6 288 + template = "Your code is {{ .Code }}" 289 + max_frequency = "5s" 290 + 291 + # Configure MFA via WebAuthn 292 + # [auth.mfa.web_authn] 293 + # enroll_enabled = true 294 + # verify_enabled = true 295 + 296 + # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, 297 + # `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, 298 + # `twitter`, `slack`, `spotify`, `workos`, `zoom`. 299 + [auth.external.apple] 300 + enabled = false 301 + client_id = "" 302 + # DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: 303 + secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" 304 + # Overrides the default auth redirectUrl. 305 + redirect_uri = "" 306 + # Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, 307 + # or any other third-party OIDC providers. 308 + url = "" 309 + # If enabled, the nonce check will be skipped. Required for local sign in with Google auth. 310 + skip_nonce_check = false 311 + # If enabled, it will allow the user to successfully authenticate when the provider does not return an email address. 312 + email_optional = false 313 + 314 + # Allow Solana wallet holders to sign in to your project via the Sign in with Solana (SIWS, EIP-4361) standard. 315 + # You can configure "web3" rate limit in the [auth.rate_limit] section and set up [auth.captcha] if self-hosting. 316 + [auth.web3.solana] 317 + enabled = false 318 + 319 + # Use Firebase Auth as a third-party provider alongside Supabase Auth. 320 + [auth.third_party.firebase] 321 + enabled = false 322 + # project_id = "my-firebase-project" 323 + 324 + # Use Auth0 as a third-party provider alongside Supabase Auth. 325 + [auth.third_party.auth0] 326 + enabled = false 327 + # tenant = "my-auth0-tenant" 328 + # tenant_region = "us" 329 + 330 + # Use AWS Cognito (Amplify) as a third-party provider alongside Supabase Auth. 331 + [auth.third_party.aws_cognito] 332 + enabled = false 333 + # user_pool_id = "my-user-pool-id" 334 + # user_pool_region = "us-east-1" 335 + 336 + # Use Clerk as a third-party provider alongside Supabase Auth. 337 + [auth.third_party.clerk] 338 + enabled = false 339 + # Obtain from https://clerk.com/setup/supabase 340 + # domain = "example.clerk.accounts.dev" 341 + 342 + # OAuth server configuration 343 + [auth.oauth_server] 344 + # Enable OAuth server functionality 345 + enabled = false 346 + # Path for OAuth consent flow UI 347 + authorization_url_path = "/oauth/consent" 348 + # Allow dynamic client registration 349 + allow_dynamic_registration = false 350 + 351 + [edge_runtime] 352 + enabled = true 353 + # Supported request policies: `oneshot`, `per_worker`. 354 + # `per_worker` (default) — enables hot reload during local development. 355 + # `oneshot` — fallback mode if hot reload causes issues (e.g. in large repos or with symlinks). 356 + policy = "per_worker" 357 + # Port to attach the Chrome inspector for debugging edge functions. 358 + inspector_port = 8083 359 + # The Deno major version to use. 360 + deno_version = 2 361 + 362 + # [edge_runtime.secrets] 363 + # secret_key = "env(SECRET_VALUE)" 364 + 365 + [analytics] 366 + enabled = true 367 + port = 54327 368 + # Configure one of the supported backends: `postgres`, `bigquery`. 369 + backend = "postgres" 370 + 371 + # Experimental features may be deprecated any time 372 + [experimental] 373 + # Configures Postgres storage engine to use OrioleDB (S3) 374 + orioledb_version = "" 375 + # Configures S3 bucket URL, eg. <bucket_name>.s3-<region>.amazonaws.com 376 + s3_host = "env(S3_HOST)" 377 + # Configures S3 bucket region, eg. us-east-1 378 + s3_region = "env(S3_REGION)" 379 + # Configures AWS_ACCESS_KEY_ID for S3 bucket 380 + s3_access_key = "env(S3_ACCESS_KEY)" 381 + # Configures AWS_SECRET_ACCESS_KEY for S3 bucket 382 + s3_secret_key = "env(S3_SECRET_KEY)"
+299
package-lock.json
··· 68 68 "lightningcss": "^1.30.2", 69 69 "mdsvex": "^0.12.6", 70 70 "playwright": "^1.56.1", 71 + "supabase": "^2.67.3", 71 72 "svelte": "^5.46.0", 72 73 "svelte-check": "^4.3.3", 73 74 "tailwindcss": "^4.1.17", ··· 1389 1390 "peer": true, 1390 1391 "dependencies": { 1391 1392 "@swc/helpers": "^0.5.0" 1393 + } 1394 + }, 1395 + "node_modules/@isaacs/fs-minipass": { 1396 + "version": "4.0.1", 1397 + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", 1398 + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", 1399 + "dev": true, 1400 + "license": "ISC", 1401 + "dependencies": { 1402 + "minipass": "^7.0.4" 1403 + }, 1404 + "engines": { 1405 + "node": ">=18.0.0" 1392 1406 } 1393 1407 }, 1394 1408 "node_modules/@jridgewell/gen-mapping": { ··· 3851 3865 "node": ">=0.4.0" 3852 3866 } 3853 3867 }, 3868 + "node_modules/agent-base": { 3869 + "version": "7.1.4", 3870 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", 3871 + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", 3872 + "dev": true, 3873 + "license": "MIT", 3874 + "engines": { 3875 + "node": ">= 14" 3876 + } 3877 + }, 3854 3878 "node_modules/ajv": { 3855 3879 "version": "6.12.6", 3856 3880 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", ··· 4022 4046 "dev": true, 4023 4047 "license": "MIT" 4024 4048 }, 4049 + "node_modules/bin-links": { 4050 + "version": "6.0.0", 4051 + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-6.0.0.tgz", 4052 + "integrity": "sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==", 4053 + "dev": true, 4054 + "license": "ISC", 4055 + "dependencies": { 4056 + "cmd-shim": "^8.0.0", 4057 + "npm-normalize-package-bin": "^5.0.0", 4058 + "proc-log": "^6.0.0", 4059 + "read-cmd-shim": "^6.0.0", 4060 + "write-file-atomic": "^7.0.0" 4061 + }, 4062 + "engines": { 4063 + "node": "^20.17.0 || >=22.9.0" 4064 + } 4065 + }, 4025 4066 "node_modules/birpc": { 4026 4067 "version": "4.0.0", 4027 4068 "resolved": "https://registry.npmjs.org/birpc/-/birpc-4.0.0.tgz", ··· 4161 4202 "url": "https://paulmillr.com/funding/" 4162 4203 } 4163 4204 }, 4205 + "node_modules/chownr": { 4206 + "version": "3.0.0", 4207 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", 4208 + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", 4209 + "dev": true, 4210 + "license": "BlueOak-1.0.0", 4211 + "engines": { 4212 + "node": ">=18" 4213 + } 4214 + }, 4164 4215 "node_modules/chromatic": { 4165 4216 "version": "13.3.4", 4166 4217 "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-13.3.4.tgz", ··· 4195 4246 "node": ">=6" 4196 4247 } 4197 4248 }, 4249 + "node_modules/cmd-shim": { 4250 + "version": "8.0.0", 4251 + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-8.0.0.tgz", 4252 + "integrity": "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==", 4253 + "dev": true, 4254 + "license": "ISC", 4255 + "engines": { 4256 + "node": "^20.17.0 || >=22.9.0" 4257 + } 4258 + }, 4198 4259 "node_modules/color": { 4199 4260 "version": "4.2.3", 4200 4261 "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", ··· 4333 4394 "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 4334 4395 "dev": true, 4335 4396 "license": "MIT" 4397 + }, 4398 + "node_modules/data-uri-to-buffer": { 4399 + "version": "4.0.1", 4400 + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 4401 + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 4402 + "dev": true, 4403 + "license": "MIT", 4404 + "engines": { 4405 + "node": ">= 12" 4406 + } 4336 4407 }, 4337 4408 "node_modules/debug": { 4338 4409 "version": "4.4.3", ··· 4934 5005 } 4935 5006 } 4936 5007 }, 5008 + "node_modules/fetch-blob": { 5009 + "version": "3.2.0", 5010 + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 5011 + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 5012 + "dev": true, 5013 + "funding": [ 5014 + { 5015 + "type": "github", 5016 + "url": "https://github.com/sponsors/jimmywarting" 5017 + }, 5018 + { 5019 + "type": "paypal", 5020 + "url": "https://paypal.me/jimmywarting" 5021 + } 5022 + ], 5023 + "license": "MIT", 5024 + "dependencies": { 5025 + "node-domexception": "^1.0.0", 5026 + "web-streams-polyfill": "^3.0.3" 5027 + }, 5028 + "engines": { 5029 + "node": "^12.20 || >= 14.13" 5030 + } 5031 + }, 4937 5032 "node_modules/fflate": { 4938 5033 "version": "0.8.2", 4939 5034 "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", ··· 4991 5086 "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 4992 5087 "dev": true, 4993 5088 "license": "ISC" 5089 + }, 5090 + "node_modules/formdata-polyfill": { 5091 + "version": "4.0.10", 5092 + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 5093 + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 5094 + "dev": true, 5095 + "license": "MIT", 5096 + "dependencies": { 5097 + "fetch-blob": "^3.1.2" 5098 + }, 5099 + "engines": { 5100 + "node": ">=12.20.0" 5101 + } 4994 5102 }, 4995 5103 "node_modules/fsevents": { 4996 5104 "version": "2.3.3", ··· 5108 5216 "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 5109 5217 "dev": true, 5110 5218 "license": "MIT" 5219 + }, 5220 + "node_modules/https-proxy-agent": { 5221 + "version": "7.0.6", 5222 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 5223 + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 5224 + "dev": true, 5225 + "license": "MIT", 5226 + "dependencies": { 5227 + "agent-base": "^7.1.2", 5228 + "debug": "4" 5229 + }, 5230 + "engines": { 5231 + "node": ">= 14" 5232 + } 5111 5233 }, 5112 5234 "node_modules/iceberg-js": { 5113 5235 "version": "0.8.1", ··· 5947 6069 "node": "*" 5948 6070 } 5949 6071 }, 6072 + "node_modules/minipass": { 6073 + "version": "7.1.2", 6074 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 6075 + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 6076 + "dev": true, 6077 + "license": "ISC", 6078 + "engines": { 6079 + "node": ">=16 || 14 >=14.17" 6080 + } 6081 + }, 6082 + "node_modules/minizlib": { 6083 + "version": "3.1.0", 6084 + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", 6085 + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", 6086 + "dev": true, 6087 + "license": "MIT", 6088 + "dependencies": { 6089 + "minipass": "^7.1.2" 6090 + }, 6091 + "engines": { 6092 + "node": ">= 18" 6093 + } 6094 + }, 5950 6095 "node_modules/mlly": { 5951 6096 "version": "1.8.0", 5952 6097 "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", ··· 6076 6221 "dev": true, 6077 6222 "license": "MIT" 6078 6223 }, 6224 + "node_modules/node-domexception": { 6225 + "version": "1.0.0", 6226 + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 6227 + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 6228 + "deprecated": "Use your platform's native DOMException instead", 6229 + "dev": true, 6230 + "funding": [ 6231 + { 6232 + "type": "github", 6233 + "url": "https://github.com/sponsors/jimmywarting" 6234 + }, 6235 + { 6236 + "type": "github", 6237 + "url": "https://paypal.me/jimmywarting" 6238 + } 6239 + ], 6240 + "license": "MIT", 6241 + "engines": { 6242 + "node": ">=10.5.0" 6243 + } 6244 + }, 6245 + "node_modules/node-fetch": { 6246 + "version": "3.3.2", 6247 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", 6248 + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 6249 + "dev": true, 6250 + "license": "MIT", 6251 + "dependencies": { 6252 + "data-uri-to-buffer": "^4.0.0", 6253 + "fetch-blob": "^3.1.4", 6254 + "formdata-polyfill": "^4.0.10" 6255 + }, 6256 + "engines": { 6257 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 6258 + }, 6259 + "funding": { 6260 + "type": "opencollective", 6261 + "url": "https://opencollective.com/node-fetch" 6262 + } 6263 + }, 6079 6264 "node_modules/node-fetch-native": { 6080 6265 "version": "1.6.7", 6081 6266 "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", ··· 6242 6427 "node": ">=0.10.0" 6243 6428 } 6244 6429 }, 6430 + "node_modules/npm-normalize-package-bin": { 6431 + "version": "5.0.0", 6432 + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", 6433 + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", 6434 + "dev": true, 6435 + "license": "ISC", 6436 + "engines": { 6437 + "node": "^20.17.0 || >=22.9.0" 6438 + } 6439 + }, 6245 6440 "node_modules/obug": { 6246 6441 "version": "2.1.1", 6247 6442 "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", ··· 6778 6973 "node": ">=6" 6779 6974 } 6780 6975 }, 6976 + "node_modules/proc-log": { 6977 + "version": "6.1.0", 6978 + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", 6979 + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", 6980 + "dev": true, 6981 + "license": "ISC", 6982 + "engines": { 6983 + "node": "^20.17.0 || >=22.9.0" 6984 + } 6985 + }, 6781 6986 "node_modules/publint": { 6782 6987 "version": "0.3.16", 6783 6988 "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.16.tgz", ··· 6862 7067 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 6863 7068 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 6864 7069 "license": "MIT" 7070 + }, 7071 + "node_modules/read-cmd-shim": { 7072 + "version": "6.0.0", 7073 + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz", 7074 + "integrity": "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==", 7075 + "dev": true, 7076 + "license": "ISC", 7077 + "engines": { 7078 + "node": "^20.17.0 || >=22.9.0" 7079 + } 6865 7080 }, 6866 7081 "node_modules/readdirp": { 6867 7082 "version": "5.0.0", ··· 7220 7435 "dev": true, 7221 7436 "license": "ISC" 7222 7437 }, 7438 + "node_modules/signal-exit": { 7439 + "version": "4.1.0", 7440 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 7441 + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 7442 + "dev": true, 7443 + "license": "ISC", 7444 + "engines": { 7445 + "node": ">=14" 7446 + }, 7447 + "funding": { 7448 + "url": "https://github.com/sponsors/isaacs" 7449 + } 7450 + }, 7223 7451 "node_modules/simple-swizzle": { 7224 7452 "version": "0.2.4", 7225 7453 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", ··· 7443 7671 "license": "MIT", 7444 7672 "dependencies": { 7445 7673 "inline-style-parser": "0.2.7" 7674 + } 7675 + }, 7676 + "node_modules/supabase": { 7677 + "version": "2.67.3", 7678 + "resolved": "https://registry.npmjs.org/supabase/-/supabase-2.67.3.tgz", 7679 + "integrity": "sha512-qckJFdFh+sttA4rXe0oFb9X80nGaXXGm95tsd0IyKF/6OG/dgxSmdehkoA9CEyPwun5lpaqHdbdmYF3314M4RA==", 7680 + "dev": true, 7681 + "hasInstallScript": true, 7682 + "license": "MIT", 7683 + "dependencies": { 7684 + "bin-links": "^6.0.0", 7685 + "https-proxy-agent": "^7.0.2", 7686 + "node-fetch": "^3.3.2", 7687 + "tar": "7.5.2" 7688 + }, 7689 + "bin": { 7690 + "supabase": "bin/supabase" 7691 + }, 7692 + "engines": { 7693 + "npm": ">=8" 7446 7694 } 7447 7695 }, 7448 7696 "node_modules/supports-color": { ··· 7719 7967 "url": "https://opencollective.com/webpack" 7720 7968 } 7721 7969 }, 7970 + "node_modules/tar": { 7971 + "version": "7.5.2", 7972 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", 7973 + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", 7974 + "dev": true, 7975 + "license": "BlueOak-1.0.0", 7976 + "dependencies": { 7977 + "@isaacs/fs-minipass": "^4.0.0", 7978 + "chownr": "^3.0.0", 7979 + "minipass": "^7.1.2", 7980 + "minizlib": "^3.1.0", 7981 + "yallist": "^5.0.0" 7982 + }, 7983 + "engines": { 7984 + "node": ">=18" 7985 + } 7986 + }, 7722 7987 "node_modules/tiny-invariant": { 7723 7988 "version": "1.3.3", 7724 7989 "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", ··· 8500 8765 "vitest": "^4.0.0" 8501 8766 } 8502 8767 }, 8768 + "node_modules/web-streams-polyfill": { 8769 + "version": "3.3.3", 8770 + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", 8771 + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", 8772 + "dev": true, 8773 + "license": "MIT", 8774 + "engines": { 8775 + "node": ">= 8" 8776 + } 8777 + }, 8503 8778 "node_modules/webpack-virtual-modules": { 8504 8779 "version": "0.6.2", 8505 8780 "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", ··· 9106 9381 "@esbuild/win32-x64": "0.27.0" 9107 9382 } 9108 9383 }, 9384 + "node_modules/write-file-atomic": { 9385 + "version": "7.0.0", 9386 + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.0.tgz", 9387 + "integrity": "sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==", 9388 + "dev": true, 9389 + "license": "ISC", 9390 + "dependencies": { 9391 + "imurmurhash": "^0.1.4", 9392 + "signal-exit": "^4.0.1" 9393 + }, 9394 + "engines": { 9395 + "node": "^20.17.0 || >=22.9.0" 9396 + } 9397 + }, 9109 9398 "node_modules/ws": { 9110 9399 "version": "8.18.3", 9111 9400 "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", ··· 9140 9429 }, 9141 9430 "funding": { 9142 9431 "url": "https://github.com/sponsors/sindresorhus" 9432 + } 9433 + }, 9434 + "node_modules/yallist": { 9435 + "version": "5.0.0", 9436 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", 9437 + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", 9438 + "dev": true, 9439 + "license": "BlueOak-1.0.0", 9440 + "engines": { 9441 + "node": ">=18" 9143 9442 } 9144 9443 }, 9145 9444 "node_modules/yocto-queue": {