A discord bot for teal.fm
discord tealfm music

lots of changes

besaid.zone 2804a5d0 83d97e11

verified
+16
.env.example
···
··· 1 + DISCORD_BOT_TOKEN= 2 + DISCORD_APPLICATION_ID= 3 + DISCORD_GUILD_ID= 4 + TAP_ADMIN_PASSWORD= 5 + 6 + # database credentials 7 + POSTGRES_USER=postgres 8 + POSTGRES_PASSWORD=password 9 + POSTGRES_DB=tealfmbotdb 10 + 11 + # needed for kysely codegen 12 + DATABASE_URL=postgres://postgres:password@localhost:5432/tealfmbotdb 13 + 14 + # oauth 15 + PUBLIC_URL= 16 + PRIVATE_KEYS=
+1 -1
.oxfmtrc.json
··· 1 { 2 "$schema": "./node_modules/oxfmt/configuration_schema.json", 3 - "ignorePatterns": ["*.json", "pnpm-lock.yaml"], 4 "experimentalSortImports": { 5 "order": "asc" 6 }
··· 1 { 2 "$schema": "./node_modules/oxfmt/configuration_schema.json", 3 + "ignorePatterns": ["*.json", "pnpm-lock.yaml", "**/migrations/**.ts"], 4 "experimentalSortImports": { 5 "order": "asc" 6 }
+1
.oxlintrc.json
··· 1 { 2 "$schema": "./node_modules/oxlint/configuration_schema.json", 3 "plugins": ["import", "node"] 4 }
··· 1 { 2 "$schema": "./node_modules/oxlint/configuration_schema.json", 3 + "ignorePatterns": ["**/migrations/**.ts"], 4 "plugins": ["import", "node"] 5 }
+9 -4
apps/bot/commands/auth.ts
··· 1 import { logger } from "@tealfmbot/common/logger.ts"; 2 - import { ChatInputCommandInteraction, InteractionContextType, SlashCommandBuilder } from "discord.js"; 3 4 export default { 5 data: new SlashCommandBuilder() ··· 11 .setDescription("e.g. 'handle.bsky.social or did:plc...'") 12 .setRequired(true) 13 .setMinLength(1), 14 - ).setContexts(InteractionContextType.Guild), 15 async execute(interaction: ChatInputCommandInteraction) { 16 - const identifier = interaction.options.getString("identifier") 17 - await interaction.reply(`hello ${identifier}`) 18 logger.info(`starting authentication process for ${identifier} at ${new Date().toJSON()}`); 19 }, 20 };
··· 1 import { logger } from "@tealfmbot/common/logger.ts"; 2 + import { 3 + ChatInputCommandInteraction, 4 + InteractionContextType, 5 + SlashCommandBuilder, 6 + } from "discord.js"; 7 8 export default { 9 data: new SlashCommandBuilder() ··· 15 .setDescription("e.g. 'handle.bsky.social or did:plc...'") 16 .setRequired(true) 17 .setMinLength(1), 18 + ) 19 + .setContexts(InteractionContextType.Guild), 20 async execute(interaction: ChatInputCommandInteraction) { 21 + const identifier = interaction.options.getString("identifier"); 22 + await interaction.reply(`hello ${identifier}`); 23 logger.info(`starting authentication process for ${identifier} at ${new Date().toJSON()}`); 24 }, 25 };
+15
apps/web/bin/gen-jwk
···
··· 1 + #!/usr/bin/env node 2 + 3 + 'use strict' 4 + 5 + import { JoseKey } from "@atproto/oauth-client-node" 6 + 7 + async function main() { 8 + const kid = Date.now().toString() 9 + const key = await JoseKey.generate(['ES256'], kid) 10 + const jwk = key.privateJwk 11 + 12 + console.log(JSON.stringify(jwk)) 13 + } 14 + 15 + main()
+51
apps/web/client.ts
···
··· 1 + import { 2 + Keyset, 3 + JoseKey, 4 + atprotoLoopbackClientMetadata, 5 + NodeOAuthClient, 6 + type OAuthClientMetadataInput, 7 + } from "@atproto/oauth-client-node"; 8 + import { PUBLIC_URL, PRIVATE_KEYS } from "@tealfmbot/common/constants.ts"; 9 + import type { Database } from "@tealfmbot/database/types.ts"; 10 + import assert from "node:assert"; 11 + 12 + import { SessionStore, StateStore } from "./storage"; 13 + 14 + export async function createOauthClient(db: Database) { 15 + const keyset = 16 + PUBLIC_URL && PRIVATE_KEYS 17 + ? new Keyset(await Promise.all(PRIVATE_KEYS.map((jwk) => JoseKey.fromJWK(jwk)))) 18 + : undefined; 19 + 20 + assert(!PUBLIC_URL || keyset?.size, "PRIVATE_KEYS environment variable must be set"); 21 + 22 + const pk = keyset?.findPrivateKey({ usage: "sign" }); 23 + 24 + const clientMetadata: OAuthClientMetadataInput = PUBLIC_URL 25 + ? { 26 + client_name: "Teal.fm Discord Bot", 27 + client_id: `${PUBLIC_URL}/oauth-client-metadata.json`, 28 + jwks_uri: `${PUBLIC_URL}/.well-known/jwks.json`, 29 + redirect_uris: [`${PUBLIC_URL}/oauth/callback`], 30 + scope: "atproto transition:generic", 31 + grant_types: ["authorization_code", "refresh_token"], 32 + response_types: ["code"], 33 + application_type: "web", 34 + token_endpoint_auth_method: pk ? "private_key_jwt" : "none", 35 + token_endpoint_auth_signing_alg: pk ? pk.alg : undefined, 36 + dpop_bound_access_tokens: true, 37 + } 38 + : atprotoLoopbackClientMetadata( 39 + `http://localhost?${new URLSearchParams([ 40 + ["redirect_uri", "http://127.0.0.1:8002/oauth/callback"], 41 + ["scope", "atproto transition:generic"], 42 + ])}`, 43 + ); 44 + 45 + return new NodeOAuthClient({ 46 + ...(typeof keyset !== "undefined" ? { keyset } : undefined), 47 + clientMetadata, 48 + stateStore: new StateStore(db), 49 + sessionStore: new SessionStore(db), 50 + }); 51 + }
+12 -10
apps/web/index.ts
··· 1 import { serve, type HttpBindings } from "@hono/node-server"; 2 import { logger } from "@tealfmbot/common/logger.js"; 3 import { Hono } from "hono"; 4 - import pinoHttpLogger from "pino-http" 5 6 type Variables = { 7 - logger: typeof logger 8 - } 9 10 - const app = new Hono<{ Bindings: HttpBindings, Variables: Variables }>(); 11 12 app.use(async (c, next) => { 13 - await new Promise<void>((resolve) => pinoHttpLogger({ 14 - autoLogging: false, 15 - })(c.env.incoming, c.env.outgoing, () => resolve())); 16 17 - c.set("logger", c.env.incoming.log) 18 19 await next(); 20 - }) 21 22 app.get("/", (c) => { 23 - c.var.logger.info("test log") 24 return c.text("yo!!"); 25 }); 26
··· 1 import { serve, type HttpBindings } from "@hono/node-server"; 2 import { logger } from "@tealfmbot/common/logger.js"; 3 import { Hono } from "hono"; 4 + import pinoHttpLogger from "pino-http"; 5 6 type Variables = { 7 + logger: typeof logger; 8 + }; 9 10 + const app = new Hono<{ Bindings: HttpBindings; Variables: Variables }>(); 11 12 app.use(async (c, next) => { 13 + await new Promise<void>((resolve) => 14 + pinoHttpLogger({ 15 + autoLogging: false, 16 + })(c.env.incoming, c.env.outgoing, () => resolve()), 17 + ); 18 19 + c.set("logger", c.env.incoming.log); 20 21 await next(); 22 + }); 23 24 app.get("/", (c) => { 25 + c.var.logger.info("test log"); 26 return c.text("yo!!"); 27 }); 28
+2
apps/web/package.json
··· 9 "typecheck": "tsc --noEmit" 10 }, 11 "dependencies": { 12 "@hono/node-server": "^1.19.7", 13 "@tealfmbot/common": "workspace:*", 14 "@tealfmbot/tsconfig": "workspace:*", 15 "hono": "^4.11.3", 16 "pino-http": "^11.0.0" 17 },
··· 9 "typecheck": "tsc --noEmit" 10 }, 11 "dependencies": { 12 + "@atproto/oauth-client-node": "^0.3.13", 13 "@hono/node-server": "^1.19.7", 14 "@tealfmbot/common": "workspace:*", 15 "@tealfmbot/tsconfig": "workspace:*", 16 + "@tealfmbot/database": "workspace:*", 17 "hono": "^4.11.3", 18 "pino-http": "^11.0.0" 19 },
+55
apps/web/storage.ts
···
··· 1 + import type { 2 + NodeSavedSession, 3 + NodeSavedSessionStore, 4 + NodeSavedState, 5 + NodeSavedStateStore, 6 + } from "@atproto/oauth-client-node"; 7 + import type { Database } from "@tealfmbot/database/types.ts"; 8 + 9 + export class StateStore implements NodeSavedStateStore { 10 + constructor(private db: Database) {} 11 + async get(key: string): Promise<NodeSavedState | undefined> { 12 + const result = await this.db 13 + .selectFrom("auth_state") 14 + .selectAll() 15 + .where("key", "=", key) 16 + .executeTakeFirst(); 17 + if (!result) return; 18 + return JSON.parse(result.state) as NodeSavedState; 19 + } 20 + async set(key: string, val: NodeSavedState) { 21 + const state = JSON.stringify(val); 22 + await this.db 23 + .insertInto("auth_state") 24 + .values({ key, state }) 25 + .onConflict((oc) => oc.doUpdateSet({ state })) 26 + .execute(); 27 + } 28 + async del(key: string) { 29 + await this.db.deleteFrom("auth_state").where("key", "=", key).execute(); 30 + } 31 + } 32 + 33 + export class SessionStore implements NodeSavedSessionStore { 34 + constructor(private db: Database) {} 35 + async get(key: string): Promise<NodeSavedSession | undefined> { 36 + const result = await this.db 37 + .selectFrom("auth_session") 38 + .selectAll() 39 + .where("key", "=", key) 40 + .executeTakeFirst(); 41 + if (!result) return; 42 + return JSON.parse(result.session) as NodeSavedSession; 43 + } 44 + async set(key: string, value: NodeSavedSession) { 45 + const session = JSON.stringify(value); 46 + await this.db 47 + .insertInto("auth_session") 48 + .values({ key, session }) 49 + .onConflict((oc) => oc.doUpdateSet({ session })) 50 + .execute(); 51 + } 52 + async del(key: string) { 53 + await this.db.deleteFrom("auth_session").where("key", "=", key).execute(); 54 + } 55 + }
+2
packages/common/constants.ts
··· 8 export const DISCORD_GUILD_ID = process.env.DISCORD_GUILD_ID as string; 9 export const TAP_ADMIN_PASSWORD = process.env.TAP_ADMIN_PASSWORD as string; 10 export const DATABASE_URL = process.env.DATABASE_URL as string;
··· 8 export const DISCORD_GUILD_ID = process.env.DISCORD_GUILD_ID as string; 9 export const TAP_ADMIN_PASSWORD = process.env.TAP_ADMIN_PASSWORD as string; 10 export const DATABASE_URL = process.env.DATABASE_URL as string; 11 + export const PUBLIC_URL = process.env.PUBLIC_URL as string; 12 + export const PRIVATE_KEYS = process.env.PRIVATE_KEYS as unknown as string[];
+7
packages/database/.config/kysely.config.ts
···
··· 1 + import { defineConfig } from "kysely-ctl"; 2 + 3 + import { db as kysely } from "../db"; 4 + 5 + export default defineConfig({ 6 + kysely, 7 + });
+35
packages/database/migrate.ts
···
··· 1 + import type { DB } from "kysely-codegen"; 2 + 3 + import { DATABASE_URL } from "@tealfmbot/common/constants.ts"; 4 + import { Kysely, Migrator, PostgresDialect, FileMigrationProvider } from "kysely"; 5 + import { run } from "kysely-migration-cli"; 6 + import fs from "node:fs/promises"; 7 + import path from "node:path"; 8 + import { Pool } from "pg"; 9 + 10 + async function migrateToLatest() { 11 + const migrationFolder = new URL("../migrations", import.meta.url).pathname; 12 + 13 + const db = new Kysely<DB>({ 14 + dialect: new PostgresDialect({ 15 + pool: new Pool({ 16 + connectionString: DATABASE_URL, 17 + }), 18 + }), 19 + }); 20 + 21 + const migrator = new Migrator({ 22 + db, 23 + provider: new FileMigrationProvider({ 24 + fs, 25 + path, 26 + migrationFolder, 27 + }), 28 + }); 29 + 30 + // @ts-ignore fix later 31 + run(db, migrator, migrationFolder); 32 + await db.destroy(); 33 + } 34 + 35 + migrateToLatest().catch((err) => console.error(err));
+19
packages/database/migrations/1766974106212_oauth.ts
···
··· 1 + import { type Kysely } from "kysely"; 2 + 3 + export async function up(db: Kysely<any>): Promise<void> { 4 + await db.schema 5 + .createTable("auth_session") 6 + .addColumn("key", "varchar", (col) => col.primaryKey()) 7 + .addColumn("session", "varchar", (col) => col.notNull()) 8 + .execute(); 9 + await db.schema 10 + .createTable("auth_state") 11 + .addColumn("key", "varchar", (col) => col.primaryKey()) 12 + .addColumn("state", "varchar", (col) => col.notNull()) 13 + .execute(); 14 + } 15 + 16 + export async function down(db: Kysely<any>): Promise<void> { 17 + await db.schema.dropTable("auth_state").execute(); 18 + await db.schema.dropTable("auth_session").execute(); 19 + }
packages/database/migrations/schema.ts packages/database/migrations/1766974086093_initial.ts
-46
packages/database/migrator.ts
··· 1 - import type { DB } from "kysely-codegen"; 2 - 3 - import { DATABASE_URL } from "@tealfmbot/common/constants.ts"; 4 - import { Kysely, Migrator, PostgresDialect, FileMigrationProvider } from "kysely"; 5 - import fs from "node:fs/promises"; 6 - import path from "node:path"; 7 - import { Pool } from "pg"; 8 - 9 - async function migrateToLatest() { 10 - const db = new Kysely<DB>({ 11 - dialect: new PostgresDialect({ 12 - pool: new Pool({ 13 - connectionString: DATABASE_URL, 14 - }), 15 - }), 16 - }); 17 - 18 - const migrator = new Migrator({ 19 - db, 20 - provider: new FileMigrationProvider({ 21 - fs, 22 - path, 23 - migrationFolder: path.join(import.meta.dirname, "../migrations"), 24 - }), 25 - }); 26 - 27 - const { error, results } = await migrator.migrateToLatest(); 28 - 29 - results?.forEach((result) => { 30 - if (result.status === "Success") { 31 - console.log(`migration ${result.migrationName} was executed successfully`); 32 - } else if (result.status === "Error") { 33 - console.error(`failed to execute migration: "${result.migrationName}" `); 34 - } 35 - }); 36 - 37 - if (error) { 38 - console.error("failed to migrate"); 39 - console.error(error); 40 - process.exit(1); 41 - } 42 - 43 - await db.destroy(); 44 - } 45 - 46 - migrateToLatest().catch((err) => console.error(err));
···
+5 -2
packages/database/package.json
··· 4 "private": true, 5 "type": "module", 6 "exports": { 7 - "./db.ts": "./db.ts" 8 }, 9 "scripts": { 10 - "migrate": "tsx migrator.ts", 11 "codegen": "kysely-codegen --dialect postgres --env-file='../../.env'", 12 "seed": "tsx seed.ts", 13 "typecheck": "tsc --noEmit" ··· 22 "@types/node": "^22.15.3", 23 "@types/pg": "^8.16.0", 24 "kysely-codegen": "^0.19.0", 25 "tsx": "^4.21.0", 26 "typescript": "5.9.2" 27 }
··· 4 "private": true, 5 "type": "module", 6 "exports": { 7 + "./db.ts": "./db.ts", 8 + "./types.ts": "./types.ts" 9 }, 10 "scripts": { 11 + "migrate": "kysely migrate latest", 12 "codegen": "kysely-codegen --dialect postgres --env-file='../../.env'", 13 "seed": "tsx seed.ts", 14 "typecheck": "tsc --noEmit" ··· 23 "@types/node": "^22.15.3", 24 "@types/pg": "^8.16.0", 25 "kysely-codegen": "^0.19.0", 26 + "kysely-ctl": "^0.19.0", 27 + "kysely-migration-cli": "^0.4.2", 28 "tsx": "^4.21.0", 29 "typescript": "5.9.2" 30 }
+3
packages/database/types.ts
··· 1 import type { Artists, Plays } from "kysely-codegen"; 2 3 export interface TealFMPlay extends Plays { 4 artists: Artists; 5 }
··· 1 import type { Artists, Plays } from "kysely-codegen"; 2 3 + import { db } from "./db.ts"; 4 + 5 + export type Database = typeof db; 6 export interface TealFMPlay extends Plays { 7 artists: Artists; 8 }
+441
pnpm-lock.yaml
··· 67 68 apps/web: 69 dependencies: 70 '@hono/node-server': 71 specifier: ^1.19.7 72 version: 1.19.7(hono@4.11.3) 73 '@tealfmbot/common': 74 specifier: workspace:* 75 version: link:../../packages/common 76 '@tealfmbot/tsconfig': 77 specifier: workspace:* 78 version: link:../../packages/tsconfig ··· 136 kysely-codegen: 137 specifier: ^0.19.0 138 version: 0.19.0(kysely@0.28.9)(pg@8.16.3)(typescript@5.9.2) 139 tsx: 140 specifier: ^4.21.0 141 version: 4.21.0 ··· 147 148 packages: 149 150 '@atproto/common-web@0.4.7': 151 resolution: {integrity: sha512-vjw2+81KPo2/SAbbARGn64Ln+6JTI0FTI4xk8if0ebBfDxFRmHb2oSN1y77hzNq/ybGHqA2mecfhS03pxC5+lg==} 152 ··· 154 resolution: {integrity: sha512-jMC9ikl8QbJcnh21upe9Gb9mIaSJWsdp8sgaelmntUtChWnxxvCC/pI3TBX11PT7XlHUE6UyuvY+S3hh6WZVEg==} 155 engines: {node: '>=18.7.0'} 156 157 '@atproto/lex-cbor@0.0.3': 158 resolution: {integrity: sha512-N8lCV3kK5ZcjSOWxKLWqzlnaSpK4isjXRZ0EqApl/5y9KB64s78hQ/U3KIE5qnPRlBbW5kSH3YACoU27u9nTOA==} 159 ··· 163 '@atproto/lex-json@0.0.3': 164 resolution: {integrity: sha512-ZVcY7XlRfdPYvQQ2WroKUepee0+NCovrSXgXURM3Xv+n5jflJCoczguROeRr8sN0xvT0ZbzMrDNHCUYKNnxcjw==} 165 166 '@atproto/syntax@0.4.2': 167 resolution: {integrity: sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==} 168 ··· 174 resolution: {integrity: sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg==} 175 engines: {node: '>=18.7.0'} 176 177 '@babel/code-frame@7.27.1': 178 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 179 engines: {node: '>=6.9.0'} ··· 181 '@babel/helper-validator-identifier@7.28.5': 182 resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 183 engines: {node: '>=6.9.0'} 184 185 '@discordjs/builders@1.13.1': 186 resolution: {integrity: sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w==} ··· 518 buffer@6.0.3: 519 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 520 521 callsites@3.1.0: 522 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 523 engines: {node: '>=6'} ··· 530 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 531 engines: {node: '>=10'} 532 533 color-convert@1.9.3: 534 resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 535 ··· 545 546 colorette@2.0.20: 547 resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 548 549 concat-map@0.0.1: 550 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 551 552 cosmiconfig@9.0.0: 553 resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 554 engines: {node: '>=14'} ··· 560 561 dateformat@4.6.3: 562 resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} 563 564 diff@3.5.0: 565 resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} ··· 611 resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 612 engines: {node: '>=0.8.x'} 613 614 fast-copy@4.0.2: 615 resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} 616 ··· 645 646 get-tsconfig@4.13.0: 647 resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 648 649 git-diff@2.0.6: 650 resolution: {integrity: sha512-/Iu4prUrydE3Pb3lCBMbcSNIf81tgGt0W1ZwknnyF62t3tHmtiJTRj0f+1ZIhp3+Rh0ktz1pJVoa7ZXUCskivA==} ··· 691 resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 692 engines: {node: '>= 0.10'} 693 694 is-arrayish@0.2.1: 695 resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 696 ··· 705 iso-datestring-validator@2.2.2: 706 resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 707 708 joycon@3.1.1: 709 resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 710 engines: {node: '>=10'} ··· 754 tedious: 755 optional: true 756 757 kysely@0.28.9: 758 resolution: {integrity: sha512-3BeXMoiOhpOwu62CiVpO6lxfq4eS6KMYfQdMsN/2kUCRNuF2YiEr7u0HLHaQU+O4Xu8YXE3bHVkwaQ85i72EuA==} 759 engines: {node: '>=20.0.0'} ··· 825 resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} 826 engines: {node: '>= 0.6.0'} 827 828 magic-bytes.js@1.12.1: 829 resolution: {integrity: sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==} 830 ··· 841 multiformats@9.9.0: 842 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 843 844 on-exit-leak-free@2.1.2: 845 resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 846 engines: {node: '>=14.0.0'} ··· 878 path-parse@1.0.7: 879 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 880 881 pg-cloudflare@1.2.7: 882 resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} 883 ··· 949 resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} 950 hasBin: true 951 952 pluralize@8.0.0: 953 resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 954 engines: {node: '>=4'} ··· 985 quick-format-unescaped@4.0.4: 986 resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 987 988 readable-stream@4.7.0: 989 resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 990 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 991 992 real-require@0.2.0: 993 resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 994 engines: {node: '>= 12.13.0'} ··· 1038 resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1039 engines: {node: '>= 10.x'} 1040 1041 string_decoder@1.3.0: 1042 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1043 ··· 1063 thread-stream@3.1.0: 1064 resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 1065 1066 tinypool@2.0.0: 1067 resolution: {integrity: sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==} 1068 engines: {node: ^20.0.0 || >=22.0.0} ··· 1074 ts-mixer@6.0.4: 1075 resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} 1076 1077 tslib@2.8.1: 1078 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1079 ··· 1091 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1092 engines: {node: '>=14.17'} 1093 hasBin: true 1094 1095 uint8arrays@3.0.0: 1096 resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} ··· 1135 1136 snapshots: 1137 1138 '@atproto/common-web@0.4.7': 1139 dependencies: 1140 '@atproto/lex-data': 0.0.3 ··· 1150 multiformats: 9.9.0 1151 pino: 8.21.0 1152 1153 '@atproto/lex-cbor@0.0.3': 1154 dependencies: 1155 '@atproto/lex-data': 0.0.3 ··· 1169 '@atproto/lex-data': 0.0.3 1170 tslib: 2.8.1 1171 1172 '@atproto/syntax@0.4.2': {} 1173 1174 '@atproto/tap@0.0.2': ··· 1190 - bufferutil 1191 - utf-8-validate 1192 1193 '@babel/code-frame@7.27.1': 1194 dependencies: 1195 '@babel/helper-validator-identifier': 7.28.5 ··· 1197 picocolors: 1.1.1 1198 1199 '@babel/helper-validator-identifier@7.28.5': {} 1200 1201 '@discordjs/builders@1.13.1': 1202 dependencies: ··· 1442 base64-js: 1.5.1 1443 ieee754: 1.2.1 1444 1445 callsites@3.1.0: {} 1446 1447 chalk@2.4.2: ··· 1455 ansi-styles: 4.3.0 1456 supports-color: 7.2.0 1457 1458 color-convert@1.9.3: 1459 dependencies: 1460 color-name: 1.1.3 ··· 1469 1470 colorette@2.0.20: {} 1471 1472 concat-map@0.0.1: {} 1473 1474 cosmiconfig@9.0.0(typescript@5.9.2): 1475 dependencies: 1476 env-paths: 2.2.1 ··· 1481 typescript: 5.9.2 1482 1483 dateformat@4.6.3: {} 1484 1485 diff@3.5.0: {} 1486 ··· 1558 1559 events@3.3.0: {} 1560 1561 fast-copy@4.0.2: {} 1562 1563 fast-deep-equal@3.1.3: {} ··· 1583 dependencies: 1584 resolve-pkg-maps: 1.0.0 1585 1586 git-diff@2.0.6: 1587 dependencies: 1588 chalk: 2.4.2 ··· 1628 1629 interpret@1.4.0: {} 1630 1631 is-arrayish@0.2.1: {} 1632 1633 is-core-module@2.16.1: ··· 1637 is-number@7.0.0: {} 1638 1639 iso-datestring-validator@2.2.2: {} 1640 1641 joycon@3.1.1: {} 1642 ··· 1665 transitivePeerDependencies: 1666 - typescript 1667 1668 kysely@0.28.9: {} 1669 1670 lefthook-darwin-arm64@2.0.13: ··· 1718 1719 loglevel@1.9.2: {} 1720 1721 magic-bytes.js@1.12.1: {} 1722 1723 micromatch@4.0.8: ··· 1732 minimist@1.2.8: {} 1733 1734 multiformats@9.9.0: {} 1735 1736 on-exit-leak-free@2.1.2: {} 1737 ··· 1778 1779 path-parse@1.0.7: {} 1780 1781 pg-cloudflare@1.2.7: 1782 optional: true 1783 ··· 1885 sonic-boom: 3.8.1 1886 thread-stream: 2.7.0 1887 1888 pluralize@8.0.0: {} 1889 1890 postgres-array@2.0.0: {} ··· 1910 1911 quick-format-unescaped@4.0.4: {} 1912 1913 readable-stream@4.7.0: 1914 dependencies: 1915 abort-controller: 3.0.0 ··· 1917 events: 3.3.0 1918 process: 0.11.10 1919 string_decoder: 1.3.0 1920 1921 real-require@0.2.0: {} 1922 ··· 1958 1959 split2@4.2.0: {} 1960 1961 string_decoder@1.3.0: 1962 dependencies: 1963 safe-buffer: 5.2.1 ··· 1981 thread-stream@3.1.0: 1982 dependencies: 1983 real-require: 0.2.0 1984 1985 tinypool@2.0.0: {} 1986 ··· 1990 1991 ts-mixer@6.0.4: {} 1992 1993 tslib@2.8.1: {} 1994 1995 tsx@4.21.0: ··· 2002 typescript@5.9.2: {} 2003 2004 typescript@5.9.3: {} 2005 2006 uint8arrays@3.0.0: 2007 dependencies:
··· 67 68 apps/web: 69 dependencies: 70 + '@atproto/oauth-client-node': 71 + specifier: ^0.3.13 72 + version: 0.3.13 73 '@hono/node-server': 74 specifier: ^1.19.7 75 version: 1.19.7(hono@4.11.3) 76 '@tealfmbot/common': 77 specifier: workspace:* 78 version: link:../../packages/common 79 + '@tealfmbot/database': 80 + specifier: workspace:* 81 + version: link:../../packages/database 82 '@tealfmbot/tsconfig': 83 specifier: workspace:* 84 version: link:../../packages/tsconfig ··· 142 kysely-codegen: 143 specifier: ^0.19.0 144 version: 0.19.0(kysely@0.28.9)(pg@8.16.3)(typescript@5.9.2) 145 + kysely-ctl: 146 + specifier: ^0.19.0 147 + version: 0.19.0(kysely@0.28.9)(typescript@5.9.2) 148 + kysely-migration-cli: 149 + specifier: ^0.4.2 150 + version: 0.4.2 151 tsx: 152 specifier: ^4.21.0 153 version: 4.21.0 ··· 159 160 packages: 161 162 + '@atproto-labs/did-resolver@0.2.4': 163 + resolution: {integrity: sha512-sbXxBnAJWsKv/FEGG6a/WLz7zQYUr1vA2TXvNnPwwJQJCjPwEJMOh1vM22wBr185Phy7D2GD88PcRokn7eUVyw==} 164 + 165 + '@atproto-labs/fetch-node@0.2.0': 166 + resolution: {integrity: sha512-Krq09nH/aeoiU2s9xdHA0FjTEFWG9B5FFenipv1iRixCcPc7V3DhTNDawxG9gI8Ny0k4dBVS9WTRN/IDzBx86Q==} 167 + engines: {node: '>=18.7.0'} 168 + 169 + '@atproto-labs/fetch@0.2.3': 170 + resolution: {integrity: sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==} 171 + 172 + '@atproto-labs/handle-resolver-node@0.1.23': 173 + resolution: {integrity: sha512-tBRr2LCgzn3klk+DL0xrTFv4zg5tEszdeW6vSIFVebBYSb3MLdfhievmSqZdIQ4c9UCC4hN7YXTlZCXj8+2YmQ==} 174 + engines: {node: '>=18.7.0'} 175 + 176 + '@atproto-labs/handle-resolver@0.3.4': 177 + resolution: {integrity: sha512-wsNopfzfgO3uPvfnFDgNeXgDufXxSXhjBjp2WEiSzEiLrMy0Jodnqggw4OzD9MJKf0a4Iu2/ydd537qdy91LrQ==} 178 + 179 + '@atproto-labs/identity-resolver@0.3.4': 180 + resolution: {integrity: sha512-HNUEFQIo2ws6iATxmgHd5D5rAsWYupgxZucgwolVHPiMjE1SY+EmxEsfbEN1wDEzM8/u9AKUg/jrxxPEwsgbew==} 181 + 182 + '@atproto-labs/pipe@0.1.1': 183 + resolution: {integrity: sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==} 184 + 185 + '@atproto-labs/simple-store-memory@0.1.4': 186 + resolution: {integrity: sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==} 187 + 188 + '@atproto-labs/simple-store@0.3.0': 189 + resolution: {integrity: sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==} 190 + 191 '@atproto/common-web@0.4.7': 192 resolution: {integrity: sha512-vjw2+81KPo2/SAbbARGn64Ln+6JTI0FTI4xk8if0ebBfDxFRmHb2oSN1y77hzNq/ybGHqA2mecfhS03pxC5+lg==} 193 ··· 195 resolution: {integrity: sha512-jMC9ikl8QbJcnh21upe9Gb9mIaSJWsdp8sgaelmntUtChWnxxvCC/pI3TBX11PT7XlHUE6UyuvY+S3hh6WZVEg==} 196 engines: {node: '>=18.7.0'} 197 198 + '@atproto/did@0.2.3': 199 + resolution: {integrity: sha512-VI8JJkSizvM2cHYJa37WlbzeCm5tWpojyc1/Zy8q8OOjyoy6X4S4BEfoP941oJcpxpMTObamibQIXQDo7tnIjg==} 200 + 201 + '@atproto/jwk-jose@0.1.11': 202 + resolution: {integrity: sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==} 203 + 204 + '@atproto/jwk-webcrypto@0.2.0': 205 + resolution: {integrity: sha512-UmgRrrEAkWvxwhlwe30UmDOdTEFidlIzBC7C3cCbeJMcBN1x8B3KH+crXrsTqfWQBG58mXgt8wgSK3Kxs2LhFg==} 206 + 207 + '@atproto/jwk@0.6.0': 208 + resolution: {integrity: sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==} 209 + 210 '@atproto/lex-cbor@0.0.3': 211 resolution: {integrity: sha512-N8lCV3kK5ZcjSOWxKLWqzlnaSpK4isjXRZ0EqApl/5y9KB64s78hQ/U3KIE5qnPRlBbW5kSH3YACoU27u9nTOA==} 212 ··· 216 '@atproto/lex-json@0.0.3': 217 resolution: {integrity: sha512-ZVcY7XlRfdPYvQQ2WroKUepee0+NCovrSXgXURM3Xv+n5jflJCoczguROeRr8sN0xvT0ZbzMrDNHCUYKNnxcjw==} 218 219 + '@atproto/lexicon@0.6.0': 220 + resolution: {integrity: sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ==} 221 + 222 + '@atproto/oauth-client-node@0.3.13': 223 + resolution: {integrity: sha512-k2qT5QM6Mj5I412IZOnktShmI1A5YbwLmLM4BkeEcbcOm7kU1Cr/H/zUC/zniCIj641ZudiXU80Bsyw4A6tejA==} 224 + engines: {node: '>=18.7.0'} 225 + 226 + '@atproto/oauth-client@0.5.11': 227 + resolution: {integrity: sha512-KyxKpnF988BI3m+4NNYDgkN6a2sPORD9uaOEGP4tnJLOvhMVHyATWwq3Jx4LOYotTFDOvLdheWcI1G9DozE88w==} 228 + 229 + '@atproto/oauth-types@0.5.2': 230 + resolution: {integrity: sha512-9DCDvtvCanTwAaU5UakYDO0hzcOITS3RutK5zfLytE5Y9unj0REmTDdN8Xd8YCfUJl7T/9pYpf04Uyq7bFTASg==} 231 + 232 '@atproto/syntax@0.4.2': 233 resolution: {integrity: sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==} 234 ··· 240 resolution: {integrity: sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg==} 241 engines: {node: '>=18.7.0'} 242 243 + '@atproto/xrpc@0.7.7': 244 + resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} 245 + 246 '@babel/code-frame@7.27.1': 247 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 248 engines: {node: '>=6.9.0'} ··· 250 '@babel/helper-validator-identifier@7.28.5': 251 resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 252 engines: {node: '>=6.9.0'} 253 + 254 + '@commander-js/extra-typings@11.1.0': 255 + resolution: {integrity: sha512-GuvZ38d23H+7Tz2C9DhzCepivsOsky03s5NI+KCy7ke1FNUvsJ2oO47scQ9YaGGhgjgNW5OYYNSADmbjcSoIhw==} 256 + peerDependencies: 257 + commander: 11.1.x 258 259 '@discordjs/builders@1.13.1': 260 resolution: {integrity: sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w==} ··· 592 buffer@6.0.3: 593 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 594 595 + c12@3.3.3: 596 + resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} 597 + peerDependencies: 598 + magicast: '*' 599 + peerDependenciesMeta: 600 + magicast: 601 + optional: true 602 + 603 callsites@3.1.0: 604 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 605 engines: {node: '>=6'} ··· 612 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 613 engines: {node: '>=10'} 614 615 + chokidar@5.0.0: 616 + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} 617 + engines: {node: '>= 20.19.0'} 618 + 619 + citty@0.1.6: 620 + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} 621 + 622 color-convert@1.9.3: 623 resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 624 ··· 634 635 colorette@2.0.20: 636 resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 637 + 638 + commander@11.1.0: 639 + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 640 + engines: {node: '>=16'} 641 642 concat-map@0.0.1: 643 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 644 645 + confbox@0.2.2: 646 + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} 647 + 648 + consola@3.4.2: 649 + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 650 + engines: {node: ^14.18.0 || >=16.10.0} 651 + 652 + core-js@3.47.0: 653 + resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} 654 + 655 cosmiconfig@9.0.0: 656 resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 657 engines: {node: '>=14'} ··· 663 664 dateformat@4.6.3: 665 resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} 666 + 667 + defu@6.1.4: 668 + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 669 + 670 + destr@2.0.5: 671 + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} 672 673 diff@3.5.0: 674 resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} ··· 720 resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 721 engines: {node: '>=0.8.x'} 722 723 + exsolve@1.0.8: 724 + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} 725 + 726 fast-copy@4.0.2: 727 resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} 728 ··· 757 758 get-tsconfig@4.13.0: 759 resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 760 + 761 + giget@2.0.0: 762 + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} 763 + hasBin: true 764 765 git-diff@2.0.6: 766 resolution: {integrity: sha512-/Iu4prUrydE3Pb3lCBMbcSNIf81tgGt0W1ZwknnyF62t3tHmtiJTRj0f+1ZIhp3+Rh0ktz1pJVoa7ZXUCskivA==} ··· 807 resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 808 engines: {node: '>= 0.10'} 809 810 + ipaddr.js@2.3.0: 811 + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} 812 + engines: {node: '>= 10'} 813 + 814 is-arrayish@0.2.1: 815 resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 816 ··· 825 iso-datestring-validator@2.2.2: 826 resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 827 828 + jiti@2.6.1: 829 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 830 + hasBin: true 831 + 832 + jose@5.10.0: 833 + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} 834 + 835 joycon@3.1.1: 836 resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 837 engines: {node: '>=10'} ··· 881 tedious: 882 optional: true 883 884 + kysely-ctl@0.19.0: 885 + resolution: {integrity: sha512-89hzOd1cy/H063jB2E9wYHq+uKYpaHv6Mb5RiNFpRZL6BYCah9ncsdl3x5b52eirxry4UyWSmGNN3sFv+gK+ig==} 886 + engines: {node: '>=20'} 887 + hasBin: true 888 + peerDependencies: 889 + kysely: '>=0.18.1 <0.29.0' 890 + kysely-neon: ^2 891 + kysely-postgres-js: ^2 || ^3 892 + kysely-prisma-postgres: ^0.1 893 + peerDependenciesMeta: 894 + kysely-neon: 895 + optional: true 896 + kysely-postgres-js: 897 + optional: true 898 + kysely-prisma-postgres: 899 + optional: true 900 + 901 + kysely-migration-cli@0.4.2: 902 + resolution: {integrity: sha512-904MSUdzkdxl+k3C67ogvP6ogPOEr0D6ZZDtxAmDeIHEJxZAA+eC+TLAcJt3HQABTPetwsW3pj6y1MPmaveQUg==} 903 + hasBin: true 904 + 905 kysely@0.28.9: 906 resolution: {integrity: sha512-3BeXMoiOhpOwu62CiVpO6lxfq4eS6KMYfQdMsN/2kUCRNuF2YiEr7u0HLHaQU+O4Xu8YXE3bHVkwaQ85i72EuA==} 907 engines: {node: '>=20.0.0'} ··· 973 resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} 974 engines: {node: '>= 0.6.0'} 975 976 + lru-cache@10.4.3: 977 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 978 + 979 magic-bytes.js@1.12.1: 980 resolution: {integrity: sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==} 981 ··· 992 multiformats@9.9.0: 993 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 994 995 + node-fetch-native@1.6.7: 996 + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} 997 + 998 + nypm@0.6.2: 999 + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} 1000 + engines: {node: ^14.16.0 || >=16.10.0} 1001 + hasBin: true 1002 + 1003 + ofetch@1.5.1: 1004 + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} 1005 + 1006 + ohash@2.0.11: 1007 + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 1008 + 1009 on-exit-leak-free@2.1.2: 1010 resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 1011 engines: {node: '>=14.0.0'} ··· 1043 path-parse@1.0.7: 1044 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1045 1046 + pathe@2.0.3: 1047 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1048 + 1049 + perfect-debounce@2.0.0: 1050 + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} 1051 + 1052 pg-cloudflare@1.2.7: 1053 resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} 1054 ··· 1120 resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} 1121 hasBin: true 1122 1123 + pkg-types@2.3.0: 1124 + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} 1125 + 1126 pluralize@8.0.0: 1127 resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1128 engines: {node: '>=4'} ··· 1159 quick-format-unescaped@4.0.4: 1160 resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 1161 1162 + rc9@2.1.2: 1163 + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} 1164 + 1165 readable-stream@4.7.0: 1166 resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 1167 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1168 1169 + readdirp@5.0.0: 1170 + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} 1171 + engines: {node: '>= 20.19.0'} 1172 + 1173 real-require@0.2.0: 1174 resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 1175 engines: {node: '>= 12.13.0'} ··· 1219 resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1220 engines: {node: '>= 10.x'} 1221 1222 + std-env@3.10.0: 1223 + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 1224 + 1225 string_decoder@1.3.0: 1226 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1227 ··· 1247 thread-stream@3.1.0: 1248 resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 1249 1250 + tinyexec@1.0.2: 1251 + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 1252 + engines: {node: '>=18'} 1253 + 1254 tinypool@2.0.0: 1255 resolution: {integrity: sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==} 1256 engines: {node: ^20.0.0 || >=22.0.0} ··· 1262 ts-mixer@6.0.4: 1263 resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} 1264 1265 + tsconfck@3.1.6: 1266 + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} 1267 + engines: {node: ^18 || >=20} 1268 + hasBin: true 1269 + peerDependencies: 1270 + typescript: ^5.0.0 1271 + peerDependenciesMeta: 1272 + typescript: 1273 + optional: true 1274 + 1275 tslib@2.8.1: 1276 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1277 ··· 1289 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1290 engines: {node: '>=14.17'} 1291 hasBin: true 1292 + 1293 + ufo@1.6.1: 1294 + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 1295 1296 uint8arrays@3.0.0: 1297 resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} ··· 1336 1337 snapshots: 1338 1339 + '@atproto-labs/did-resolver@0.2.4': 1340 + dependencies: 1341 + '@atproto-labs/fetch': 0.2.3 1342 + '@atproto-labs/pipe': 0.1.1 1343 + '@atproto-labs/simple-store': 0.3.0 1344 + '@atproto-labs/simple-store-memory': 0.1.4 1345 + '@atproto/did': 0.2.3 1346 + zod: 3.25.76 1347 + 1348 + '@atproto-labs/fetch-node@0.2.0': 1349 + dependencies: 1350 + '@atproto-labs/fetch': 0.2.3 1351 + '@atproto-labs/pipe': 0.1.1 1352 + ipaddr.js: 2.3.0 1353 + undici: 6.21.3 1354 + 1355 + '@atproto-labs/fetch@0.2.3': 1356 + dependencies: 1357 + '@atproto-labs/pipe': 0.1.1 1358 + 1359 + '@atproto-labs/handle-resolver-node@0.1.23': 1360 + dependencies: 1361 + '@atproto-labs/fetch-node': 0.2.0 1362 + '@atproto-labs/handle-resolver': 0.3.4 1363 + '@atproto/did': 0.2.3 1364 + 1365 + '@atproto-labs/handle-resolver@0.3.4': 1366 + dependencies: 1367 + '@atproto-labs/simple-store': 0.3.0 1368 + '@atproto-labs/simple-store-memory': 0.1.4 1369 + '@atproto/did': 0.2.3 1370 + zod: 3.25.76 1371 + 1372 + '@atproto-labs/identity-resolver@0.3.4': 1373 + dependencies: 1374 + '@atproto-labs/did-resolver': 0.2.4 1375 + '@atproto-labs/handle-resolver': 0.3.4 1376 + 1377 + '@atproto-labs/pipe@0.1.1': {} 1378 + 1379 + '@atproto-labs/simple-store-memory@0.1.4': 1380 + dependencies: 1381 + '@atproto-labs/simple-store': 0.3.0 1382 + lru-cache: 10.4.3 1383 + 1384 + '@atproto-labs/simple-store@0.3.0': {} 1385 + 1386 '@atproto/common-web@0.4.7': 1387 dependencies: 1388 '@atproto/lex-data': 0.0.3 ··· 1398 multiformats: 9.9.0 1399 pino: 8.21.0 1400 1401 + '@atproto/did@0.2.3': 1402 + dependencies: 1403 + zod: 3.25.76 1404 + 1405 + '@atproto/jwk-jose@0.1.11': 1406 + dependencies: 1407 + '@atproto/jwk': 0.6.0 1408 + jose: 5.10.0 1409 + 1410 + '@atproto/jwk-webcrypto@0.2.0': 1411 + dependencies: 1412 + '@atproto/jwk': 0.6.0 1413 + '@atproto/jwk-jose': 0.1.11 1414 + zod: 3.25.76 1415 + 1416 + '@atproto/jwk@0.6.0': 1417 + dependencies: 1418 + multiformats: 9.9.0 1419 + zod: 3.25.76 1420 + 1421 '@atproto/lex-cbor@0.0.3': 1422 dependencies: 1423 '@atproto/lex-data': 0.0.3 ··· 1437 '@atproto/lex-data': 0.0.3 1438 tslib: 2.8.1 1439 1440 + '@atproto/lexicon@0.6.0': 1441 + dependencies: 1442 + '@atproto/common-web': 0.4.7 1443 + '@atproto/syntax': 0.4.2 1444 + iso-datestring-validator: 2.2.2 1445 + multiformats: 9.9.0 1446 + zod: 3.25.76 1447 + 1448 + '@atproto/oauth-client-node@0.3.13': 1449 + dependencies: 1450 + '@atproto-labs/did-resolver': 0.2.4 1451 + '@atproto-labs/handle-resolver-node': 0.1.23 1452 + '@atproto-labs/simple-store': 0.3.0 1453 + '@atproto/did': 0.2.3 1454 + '@atproto/jwk': 0.6.0 1455 + '@atproto/jwk-jose': 0.1.11 1456 + '@atproto/jwk-webcrypto': 0.2.0 1457 + '@atproto/oauth-client': 0.5.11 1458 + '@atproto/oauth-types': 0.5.2 1459 + 1460 + '@atproto/oauth-client@0.5.11': 1461 + dependencies: 1462 + '@atproto-labs/did-resolver': 0.2.4 1463 + '@atproto-labs/fetch': 0.2.3 1464 + '@atproto-labs/handle-resolver': 0.3.4 1465 + '@atproto-labs/identity-resolver': 0.3.4 1466 + '@atproto-labs/simple-store': 0.3.0 1467 + '@atproto-labs/simple-store-memory': 0.1.4 1468 + '@atproto/did': 0.2.3 1469 + '@atproto/jwk': 0.6.0 1470 + '@atproto/oauth-types': 0.5.2 1471 + '@atproto/xrpc': 0.7.7 1472 + core-js: 3.47.0 1473 + multiformats: 9.9.0 1474 + zod: 3.25.76 1475 + 1476 + '@atproto/oauth-types@0.5.2': 1477 + dependencies: 1478 + '@atproto/did': 0.2.3 1479 + '@atproto/jwk': 0.6.0 1480 + zod: 3.25.76 1481 + 1482 '@atproto/syntax@0.4.2': {} 1483 1484 '@atproto/tap@0.0.2': ··· 1500 - bufferutil 1501 - utf-8-validate 1502 1503 + '@atproto/xrpc@0.7.7': 1504 + dependencies: 1505 + '@atproto/lexicon': 0.6.0 1506 + zod: 3.25.76 1507 + 1508 '@babel/code-frame@7.27.1': 1509 dependencies: 1510 '@babel/helper-validator-identifier': 7.28.5 ··· 1512 picocolors: 1.1.1 1513 1514 '@babel/helper-validator-identifier@7.28.5': {} 1515 + 1516 + '@commander-js/extra-typings@11.1.0(commander@11.1.0)': 1517 + dependencies: 1518 + commander: 11.1.0 1519 1520 '@discordjs/builders@1.13.1': 1521 dependencies: ··· 1761 base64-js: 1.5.1 1762 ieee754: 1.2.1 1763 1764 + c12@3.3.3: 1765 + dependencies: 1766 + chokidar: 5.0.0 1767 + confbox: 0.2.2 1768 + defu: 6.1.4 1769 + dotenv: 17.2.3 1770 + exsolve: 1.0.8 1771 + giget: 2.0.0 1772 + jiti: 2.6.1 1773 + ohash: 2.0.11 1774 + pathe: 2.0.3 1775 + perfect-debounce: 2.0.0 1776 + pkg-types: 2.3.0 1777 + rc9: 2.1.2 1778 + 1779 callsites@3.1.0: {} 1780 1781 chalk@2.4.2: ··· 1789 ansi-styles: 4.3.0 1790 supports-color: 7.2.0 1791 1792 + chokidar@5.0.0: 1793 + dependencies: 1794 + readdirp: 5.0.0 1795 + 1796 + citty@0.1.6: 1797 + dependencies: 1798 + consola: 3.4.2 1799 + 1800 color-convert@1.9.3: 1801 dependencies: 1802 color-name: 1.1.3 ··· 1811 1812 colorette@2.0.20: {} 1813 1814 + commander@11.1.0: {} 1815 + 1816 concat-map@0.0.1: {} 1817 1818 + confbox@0.2.2: {} 1819 + 1820 + consola@3.4.2: {} 1821 + 1822 + core-js@3.47.0: {} 1823 + 1824 cosmiconfig@9.0.0(typescript@5.9.2): 1825 dependencies: 1826 env-paths: 2.2.1 ··· 1831 typescript: 5.9.2 1832 1833 dateformat@4.6.3: {} 1834 + 1835 + defu@6.1.4: {} 1836 + 1837 + destr@2.0.5: {} 1838 1839 diff@3.5.0: {} 1840 ··· 1912 1913 events@3.3.0: {} 1914 1915 + exsolve@1.0.8: {} 1916 + 1917 fast-copy@4.0.2: {} 1918 1919 fast-deep-equal@3.1.3: {} ··· 1939 dependencies: 1940 resolve-pkg-maps: 1.0.0 1941 1942 + giget@2.0.0: 1943 + dependencies: 1944 + citty: 0.1.6 1945 + consola: 3.4.2 1946 + defu: 6.1.4 1947 + node-fetch-native: 1.6.7 1948 + nypm: 0.6.2 1949 + pathe: 2.0.3 1950 + 1951 git-diff@2.0.6: 1952 dependencies: 1953 chalk: 2.4.2 ··· 1993 1994 interpret@1.4.0: {} 1995 1996 + ipaddr.js@2.3.0: {} 1997 + 1998 is-arrayish@0.2.1: {} 1999 2000 is-core-module@2.16.1: ··· 2004 is-number@7.0.0: {} 2005 2006 iso-datestring-validator@2.2.2: {} 2007 + 2008 + jiti@2.6.1: {} 2009 + 2010 + jose@5.10.0: {} 2011 2012 joycon@3.1.1: {} 2013 ··· 2036 transitivePeerDependencies: 2037 - typescript 2038 2039 + kysely-ctl@0.19.0(kysely@0.28.9)(typescript@5.9.2): 2040 + dependencies: 2041 + c12: 3.3.3 2042 + citty: 0.1.6 2043 + confbox: 0.2.2 2044 + consola: 3.4.2 2045 + jiti: 2.6.1 2046 + kysely: 0.28.9 2047 + nypm: 0.6.2 2048 + ofetch: 1.5.1 2049 + pathe: 2.0.3 2050 + pkg-types: 2.3.0 2051 + std-env: 3.10.0 2052 + tsconfck: 3.1.6(typescript@5.9.2) 2053 + transitivePeerDependencies: 2054 + - magicast 2055 + - typescript 2056 + 2057 + kysely-migration-cli@0.4.2: 2058 + dependencies: 2059 + '@commander-js/extra-typings': 11.1.0(commander@11.1.0) 2060 + commander: 11.1.0 2061 + 2062 kysely@0.28.9: {} 2063 2064 lefthook-darwin-arm64@2.0.13: ··· 2112 2113 loglevel@1.9.2: {} 2114 2115 + lru-cache@10.4.3: {} 2116 + 2117 magic-bytes.js@1.12.1: {} 2118 2119 micromatch@4.0.8: ··· 2128 minimist@1.2.8: {} 2129 2130 multiformats@9.9.0: {} 2131 + 2132 + node-fetch-native@1.6.7: {} 2133 + 2134 + nypm@0.6.2: 2135 + dependencies: 2136 + citty: 0.1.6 2137 + consola: 3.4.2 2138 + pathe: 2.0.3 2139 + pkg-types: 2.3.0 2140 + tinyexec: 1.0.2 2141 + 2142 + ofetch@1.5.1: 2143 + dependencies: 2144 + destr: 2.0.5 2145 + node-fetch-native: 1.6.7 2146 + ufo: 1.6.1 2147 + 2148 + ohash@2.0.11: {} 2149 2150 on-exit-leak-free@2.1.2: {} 2151 ··· 2192 2193 path-parse@1.0.7: {} 2194 2195 + pathe@2.0.3: {} 2196 + 2197 + perfect-debounce@2.0.0: {} 2198 + 2199 pg-cloudflare@1.2.7: 2200 optional: true 2201 ··· 2303 sonic-boom: 3.8.1 2304 thread-stream: 2.7.0 2305 2306 + pkg-types@2.3.0: 2307 + dependencies: 2308 + confbox: 0.2.2 2309 + exsolve: 1.0.8 2310 + pathe: 2.0.3 2311 + 2312 pluralize@8.0.0: {} 2313 2314 postgres-array@2.0.0: {} ··· 2334 2335 quick-format-unescaped@4.0.4: {} 2336 2337 + rc9@2.1.2: 2338 + dependencies: 2339 + defu: 6.1.4 2340 + destr: 2.0.5 2341 + 2342 readable-stream@4.7.0: 2343 dependencies: 2344 abort-controller: 3.0.0 ··· 2346 events: 3.3.0 2347 process: 0.11.10 2348 string_decoder: 1.3.0 2349 + 2350 + readdirp@5.0.0: {} 2351 2352 real-require@0.2.0: {} 2353 ··· 2389 2390 split2@4.2.0: {} 2391 2392 + std-env@3.10.0: {} 2393 + 2394 string_decoder@1.3.0: 2395 dependencies: 2396 safe-buffer: 5.2.1 ··· 2414 thread-stream@3.1.0: 2415 dependencies: 2416 real-require: 0.2.0 2417 + 2418 + tinyexec@1.0.2: {} 2419 2420 tinypool@2.0.0: {} 2421 ··· 2425 2426 ts-mixer@6.0.4: {} 2427 2428 + tsconfck@3.1.6(typescript@5.9.2): 2429 + optionalDependencies: 2430 + typescript: 5.9.2 2431 + 2432 tslib@2.8.1: {} 2433 2434 tsx@4.21.0: ··· 2441 typescript@5.9.2: {} 2442 2443 typescript@5.9.3: {} 2444 + 2445 + ufo@1.6.1: {} 2446 2447 uint8arrays@3.0.0: 2448 dependencies: