+16
.env.example
+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
-1
.oxfmtrc.json
+1
.oxlintrc.json
+1
.oxlintrc.json
+9
-4
apps/bot/commands/auth.ts
+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
+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
+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
+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
+2
apps/web/package.json
···
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
+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
+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;
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
+7
packages/database/.config/kysely.config.ts
+35
packages/database/migrate.ts
+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
+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
packages/database/migrations/schema.ts
packages/database/migrations/1766974086093_initial.ts
-46
packages/database/migrator.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
+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
+3
packages/database/types.ts
+441
pnpm-lock.yaml
+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: