diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f92db06..cb62163 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: pnpm - name: 📦 Install dependencies diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b99de71..a950ebe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - name: Set node uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 22 - run: npx changelogithub env: diff --git a/.github/workflows/update-lexicons.yml b/.github/workflows/update-lexicons.yml index 3f6fdd5..7686bde 100644 --- a/.github/workflows/update-lexicons.yml +++ b/.github/workflows/update-lexicons.yml @@ -24,7 +24,7 @@ jobs: - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: pnpm - name: 📦 Install dependencies diff --git a/packages/client/globalSetup.ts b/packages/client/globalSetup.ts index 3500558..357d625 100644 --- a/packages/client/globalSetup.ts +++ b/packages/client/globalSetup.ts @@ -3,7 +3,7 @@ import fs from 'node:fs/promises'; import type { TestProject } from 'vitest/node'; import { CredentialManager, XRPC } from '@atcute/client'; -import { TestNetwork } from '@atcute/internal-dev-env'; +import { TestNetwork } from '@atproto/dev-env'; declare module 'vitest' { export interface ProvidedContext { diff --git a/packages/client/package.json b/packages/client/package.json index 02de143..6650dc4 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -27,15 +27,15 @@ "scripts": { "dev": "pkgroll --watch", "build": "pkgroll --minify", - "test": "vitest", - "test:coverage": "vitest --coverage", + "test": "bash ../internal/dev-infra/with-test-redis-and-db.sh vitest", + "test:coverage": "bash ../internal/dev-infra/with-test-redis-and-db.sh vitest --coverage", "test:typescript": "tsc --noEmit" }, "dependencies": { "@atcute/client": "^2.0.6" }, "devDependencies": { - "@atcute/internal-dev-env": "workspace:*", + "@atproto/dev-env": "^0.3.93", "@tsky/lexicons": "workspace:*", "@vitest/coverage-istanbul": "^3.0.6", "globals": "^15.12.0", diff --git a/packages/internal/dev-env/lib/constants.ts b/packages/internal/dev-env/lib/constants.ts deleted file mode 100644 index 3832c1c..0000000 --- a/packages/internal/dev-env/lib/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const ADMIN_PASSWORD = 'admin-pass'; -export const JWT_SECRET = 'jwt-secret'; diff --git a/packages/internal/dev-env/lib/index.ts b/packages/internal/dev-env/lib/index.ts deleted file mode 100644 index ec44eb5..0000000 --- a/packages/internal/dev-env/lib/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './constants.js'; -export * from './network.js'; -export * from './pds.js'; -export * from './plc.js'; -export * from './utils.js'; diff --git a/packages/internal/dev-env/lib/network.ts b/packages/internal/dev-env/lib/network.ts deleted file mode 100644 index b0ed8c8..0000000 --- a/packages/internal/dev-env/lib/network.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { TestPdsServer, type PdsServerOptions } from './pds.js'; -import { TestPlcServer, type PlcServerOptions } from './plc.js'; -import { mockNetworkUtilities } from './utils.js'; - -export type NetworkConfig = { - pds: Partial; - plc: Partial; -}; - -export class TestNetwork { - constructor( - public readonly plc: TestPlcServer, - public readonly pds: TestPdsServer, - ) {} - - static async create(cfg: Partial): Promise { - const plc = await TestPlcServer.create(cfg.plc ?? {}); - const pds = await TestPdsServer.create({ didPlcUrl: plc.url, ...cfg.pds }); - - mockNetworkUtilities(pds); - - return new TestNetwork(plc, pds); - } - - async processAll() { - await this.pds.processAll(); - } - - async close() { - await Promise.all([this.plc.close(), this.pds.close()]); - } -} diff --git a/packages/internal/dev-env/lib/pds.ts b/packages/internal/dev-env/lib/pds.ts deleted file mode 100644 index 44b831d..0000000 --- a/packages/internal/dev-env/lib/pds.ts +++ /dev/null @@ -1,122 +0,0 @@ -import fs from 'node:fs/promises'; -import os from 'node:os'; -import path from 'node:path'; - -import { Secp256k1Keypair, randomStr } from '@atproto/crypto'; -import * as pds from '@atproto/pds'; - -import getPort from 'get-port'; -import * as ui8 from 'uint8arrays'; - -import { ADMIN_PASSWORD, JWT_SECRET } from './constants.js'; - -export interface PdsServerOptions extends Partial { - didPlcUrl: string; -} - -export interface AdditionalPdsContext { - dataDirectory: string; - blobstoreLoc: string; -} - -export class TestPdsServer { - constructor( - public readonly server: pds.PDS, - public readonly url: string, - public readonly port: number, - public readonly additional: AdditionalPdsContext, - ) {} - - static async create(config: PdsServerOptions): Promise { - const plcRotationKey = await Secp256k1Keypair.create({ exportable: true }); - const plcRotationPriv = ui8.toString(await plcRotationKey.export(), 'hex'); - const recoveryKey = (await Secp256k1Keypair.create()).did(); - - const port = config.port || (await getPort()); - const url = `http://localhost:${port}`; - - const blobstoreLoc = path.join(os.tmpdir(), randomStr(8, 'base32')); - const dataDirectory = path.join(os.tmpdir(), randomStr(8, 'base32')); - - await fs.mkdir(dataDirectory, { recursive: true }); - - const env: pds.ServerEnvironment = { - devMode: true, - port, - dataDirectory: dataDirectory, - blobstoreDiskLocation: blobstoreLoc, - recoveryDidKey: recoveryKey, - adminPassword: ADMIN_PASSWORD, - jwtSecret: JWT_SECRET, - serviceHandleDomains: ['.test'], - bskyAppViewUrl: 'https://appview.invalid', - bskyAppViewDid: 'did:example:invalid', - bskyAppViewCdnUrlPattern: 'http://cdn.appview.com/%s/%s/%s', - modServiceUrl: 'https://moderator.invalid', - modServiceDid: 'did:example:invalid', - plcRotationKeyK256PrivateKeyHex: plcRotationPriv, - inviteRequired: false, - disableSsrfProtection: true, - serviceName: 'Development PDS', - brandColor: '#ffcb1e', - errorColor: undefined, - logoUrl: - 'https://uxwing.com/wp-content/themes/uxwing/download/animals-and-birds/bee-icon.png', - homeUrl: 'https://bsky.social/', - termsOfServiceUrl: 'https://bsky.social/about/support/tos', - privacyPolicyUrl: 'https://bsky.social/about/support/privacy-policy', - supportUrl: 'https://blueskyweb.zendesk.com/hc/en-us', - ...config, - }; - - const cfg = pds.envToCfg(env); - const secrets = pds.envToSecrets(env); - - const server = await pds.PDS.create(cfg, secrets); - - await server.start(); - - return new TestPdsServer(server, url, port, { - dataDirectory: dataDirectory, - blobstoreLoc: blobstoreLoc, - }); - } - - get ctx(): pds.AppContext { - return this.server.ctx; - } - - adminAuth(): string { - return `Basic ${ui8.toString( - ui8.fromString(`admin:${ADMIN_PASSWORD}`, 'utf8'), - 'base64pad', - )}`; - } - - adminAuthHeaders() { - return { - authorization: this.adminAuth(), - }; - } - - jwtSecretKey() { - return pds.createSecretKeyObject(JWT_SECRET); - } - - async processAll() { - await this.ctx.backgroundQueue.processAll(); - } - - async close() { - await this.server.destroy(); - - await fs.rm(this.additional.dataDirectory, { - recursive: true, - force: true, - }); - await fs.rm(this.additional.blobstoreLoc, { - recursive: true, - force: true, - }); - } -} diff --git a/packages/internal/dev-env/lib/plc.ts b/packages/internal/dev-env/lib/plc.ts deleted file mode 100644 index 2b397af..0000000 --- a/packages/internal/dev-env/lib/plc.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { type AppContext, Database, PlcServer } from '@did-plc/server'; - -import getPort from 'get-port'; - -export interface PlcServerOptions { - port?: number; -} - -export class TestPlcServer { - constructor( - public readonly server: PlcServer, - public readonly url: string, - public readonly port: number, - ) {} - - static async create(cfg: PlcServerOptions = {}): Promise { - const port = cfg.port ?? (await getPort()); - const url = `http://localhost:${port}`; - - const db = Database.mock(); - const server = PlcServer.create({ db, port }); - - await server.start(); - - return new TestPlcServer(server, url, port); - } - - get context(): AppContext { - return this.server.ctx; - } - - async close() { - await this.server.destroy(); - } -} diff --git a/packages/internal/dev-env/lib/utils.ts b/packages/internal/dev-env/lib/utils.ts deleted file mode 100644 index 6518620..0000000 --- a/packages/internal/dev-env/lib/utils.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { IdResolver } from '@atproto/identity'; - -import axios from 'axios'; - -import type { TestPdsServer } from './pds.js'; - -export const mockNetworkUtilities = (pds: TestPdsServer) => { - mockResolvers(pds.ctx.idResolver, pds); -}; - -export const mockResolvers = (idResolver: IdResolver, pds: TestPdsServer) => { - // Map pds public url to its local url when resolving from plc - const origResolveDid = idResolver.did.resolveNoCache; - idResolver.did.resolveNoCache = async (did: string) => { - const result = await (origResolveDid.call( - idResolver.did, - did, - ) as ReturnType); - const service = result?.service?.find((svc) => svc.id === '#atproto_pds'); - - if (typeof service?.serviceEndpoint === 'string') { - service.serviceEndpoint = service.serviceEndpoint.replace( - pds.ctx.cfg.service.publicUrl, - `http://localhost:${pds.port}`, - ); - } - - return result; - }; - - const origResolveHandleDns = idResolver.handle.resolveDns; - idResolver.handle.resolve = async (handle: string) => { - const isPdsHandle = pds.ctx.cfg.identity.serviceHandleDomains.some( - (domain) => handle.endsWith(domain), - ); - - if (!isPdsHandle) { - return origResolveHandleDns.call(idResolver.handle, handle); - } - - const url = `${pds.url}/.well-known/atproto-did`; - try { - const res = await axios.get(url, { headers: { host: handle } }); - return res.data; - } catch (err) { - return undefined; - } - }; -}; diff --git a/packages/internal/dev-env/package.json b/packages/internal/dev-env/package.json deleted file mode 100644 index 856f3d9..0000000 --- a/packages/internal/dev-env/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "private": true, - "type": "module", - "name": "@atcute/internal-dev-env", - "version": "1.0.1", - "exports": { - ".": "./dist/index.js" - }, - "scripts": { - "build": "tsc" - }, - "dependencies": { - "@atproto/crypto": "^0.4.4", - "@atproto/identity": "^0.4.6", - "@atproto/pds": "^0.4.94", - "@did-plc/server": "^0.0.1", - "axios": "^1.7.9", - "get-port": "^7.1.0", - "uint8arrays": "^5.1.0" - }, - "devDependencies": { - "typescript": "catalog:" - } -} diff --git a/packages/internal/dev-env/tsconfig.json b/packages/internal/dev-env/tsconfig.json deleted file mode 100644 index e4549a2..0000000 --- a/packages/internal/dev-env/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "outDir": "dist/", - "esModuleInterop": true, - "skipLibCheck": true, - "target": "ESNext", - "allowJs": true, - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - "strict": true, - "noImplicitOverride": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "module": "NodeNext", - "sourceMap": true, - "declaration": true, - }, - "include": ["lib"], -} diff --git a/packages/internal/dev-infra/README.md b/packages/internal/dev-infra/README.md new file mode 100644 index 0000000..4b01d6a --- /dev/null +++ b/packages/internal/dev-infra/README.md @@ -0,0 +1,83 @@ +# dev-infra + +Helpers for working with postgres and redis locally. Previously known as `pg`. + +## Usage + +### `with-test-db.sh` + +This script allows you to run any command with a fresh, ephemeral/single-use postgres database available. When the script starts a Dockerized postgres container starts-up, and when the script completes that container is removed. + +The environment variable `DB_POSTGRES_URL` will be set with a connection string that can be used to connect to the database. The [`PG*` environment variables](https://www.postgresql.org/docs/current/libpq-envars.html) that are recognized by libpq (i.e. used by the `psql` client) are also set. + +**Example** + +``` +$ ./with-test-db.sh psql -c 'select 1;' +[+] Running 1/1 + ⠿ Container pg-db_test-1 Healthy 1.8s + + ?column? +---------- + 1 +(1 row) + + +[+] Running 1/1 + ⠿ Container pg-db_test-1 Stopped 0.1s +Going to remove pg-db_test-1 +[+] Running 1/0 + ⠿ Container pg-db_test-1 Removed +``` + +### `with-redis-and-test-db.sh` + +This script is similar to `with-test-db.sh`, but in addition to an ephemeral/single-use postgres database it also provides a single-use redis instance. When the script starts, Dockerized postgres and redis containers start-up, and when the script completes the containers are removed. + +The environment variables `DB_POSTGRES_URL` and `REDIS_HOST` will be set with a connection strings that can be used to connect to postgres and redis respectively. + +### `docker-compose.yaml` + +The Docker compose file can be used to run containerized versions of postgres either for single use (as is used by `with-test-db.sh`), or for longer-term use. These are setup as separate services named `db_test` and `db` respectively. In both cases the database is available on the host machine's `localhost` and credentials are: + +- Username: pg +- Password: password + +However, each service uses a different port, documented below, to avoid conflicts. + +#### `db_test` service for single use + +The single-use `db_test` service does not have any persistent storage. When the container is removed, data in the database disappears with it. + +This service runs on port `5433`. + +``` +$ docker compose up db_test # start container +$ docker compose stop db_test # stop container +$ docker compose rm db_test # remove container +``` + +#### `db` service for persistent use + +The `db` service has persistent storage on the host machine managed by Docker under a volume named `pg_atp_db`. When the container is removed, data in the database will remain on the host machine. In order to start fresh, you would need to remove the volume. + +This service runs on port `5432`. + +``` +$ docker compose up db -d # start container +$ docker compose stop db # stop container +$ docker compose rm db # remove container +$ docker volume rm pg_atp_db # remove volume +``` + +#### `redis_test` service for single use + +The single-use `redis_test` service does not have any persistent storage. When the container is removed, the data in redis disappears with it. + +This service runs on port `6380`. + +#### `redis` service for persistent use + +The `redis` service has persistent storage on the host machine managed by Docker under a volume named `atp_redis`. When the container is removed, the data in redis will remain on the host machine. In order to start fresh, you would need to remove the volume. + +This service runs on port `6379`. diff --git a/packages/internal/dev-infra/_common.sh b/packages/internal/dev-infra/_common.sh new file mode 100755 index 0000000..3d1ff69 --- /dev/null +++ b/packages/internal/dev-infra/_common.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash + +# Exit if any command fails +set -e + +get_container_id() { + local compose_file=$1 + local service=$2 + if [ -z "${compose_file}" ] || [ -z "${service}" ]; then + echo "usage: get_container_id " + exit 1 + fi + + # first line of jq normalizes for docker compose breaking change, see docker/compose#10958 + docker compose --file $compose_file ps --format json --status running \ + | jq -sc '.[] | if type=="array" then .[] else . end' | jq -s \ + | jq -r '.[]? | select(.Service == "'${service}'") | .ID' +} + +# Exports all environment variables +export_env() { + export_pg_env + export_redis_env +} + +# Exports postgres environment variables +export_pg_env() { + # Based on creds in compose.yaml + export PGPORT=5433 + export PGHOST=localhost + export PGUSER=pg + export PGPASSWORD=password + export PGDATABASE=postgres + export DB_POSTGRES_URL="postgresql://pg:password@127.0.0.1:5433/postgres" +} + +# Exports redis environment variables +export_redis_env() { + export REDIS_HOST="127.0.0.1:6380" +} + +pg_clear() { + local pg_uri=$1 + + for schema_name in `psql "${pg_uri}" -c "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT LIKE 'pg_%' AND schema_name NOT LIKE 'information_schema';" -t`; do + psql "${pg_uri}" -c "DROP SCHEMA \"${schema_name}\" CASCADE;" + done +} + +pg_init() { + local pg_uri=$1 + + psql "${pg_uri}" -c "CREATE SCHEMA IF NOT EXISTS \"public\";" +} + +redis_clear() { + local redis_uri=$1 + redis-cli -u "${redis_uri}" flushall +} + +main_native() { + # check if Ctrl+C is pressed + ( + while true; do + sleep 1 + kill -0 $$ || break + done + cleanup ${services} + )& + pid=$! + + local services=${SERVICES} + local postgres_url_env_var=`[[ $services == *"db_test"* ]] && echo "DB_TEST_POSTGRES_URL" || echo "DB_POSTGRES_URL"` + local redis_host_env_var=`[[ $services == *"redis_test"* ]] && echo "REDIS_TEST_HOST" || echo "REDIS_HOST"` + + postgres_url="${!postgres_url_env_var}" + redis_host="${!redis_host_env_var}" + + if [ -n "${postgres_url}" ]; then + echo "Using ${postgres_url_env_var} (${postgres_url}) to connect to postgres." + pg_init "${postgres_url}" + else + echo "Postgres connection string missing did you set ${postgres_url_env_var}?" + exit 1 + fi + + if [ -n "${redis_host}" ]; then + echo "Using ${redis_host_env_var} (${redis_host}) to connect to Redis." + else + echo "Redis connection string missing did you set ${redis_host_env_var}?" + echo "Continuing without Redis..." + fi + + cleanup() { + kill ${pid} &>/dev/null + local services=$@ + + if [ -n "${redis_host}" ] && [[ $services == *"redis_test"* ]]; then + redis_clear "redis://${redis_host}" &> /dev/null + fi + + if [ -n "${postgres_url}" ] && [[ $services == *"db_test"* ]]; then + pg_clear "${postgres_url}" &> /dev/null + fi + } + + # Run the arguments as a command + DB_POSTGRES_URL="${postgres_url}" \ + REDIS_HOST="${redis_host}" \ + "$@" + code=$? + + cleanup ${services} + sleep 1 + exit ${code} +} + +main_docker() { + # check if Ctrl+C is pressed + ( + while true; do + sleep 1 + kill -0 $$ || break + done + echo "Ctrl+C detected" + cleanup ${services} + )& + pid=$! + # Expect a SERVICES env var to be set with the docker service names + local services=${SERVICES} + + dir=$(dirname $0) + compose_file="${dir}/docker-compose.yaml" + + # whether this particular script started the container(s) + started_container=false + + # performs cleanup as necessary, i.e. taking down containers + # if this script started them + cleanup() { + kill ${pid} &>/dev/null + local services=$@ + echo # newline + if $started_container; then + docker compose --file $compose_file rm --force --stop --volumes ${services} + fi + } + + # check if all services are running already + not_running=false + for service in $services; do + container_id=$(get_container_id $compose_file $service) + if [ -z $container_id ]; then + not_running=true + break + fi + done + + # if any are missing, recreate all services + if $not_running; then + started_container=true + docker compose --file $compose_file up --wait --force-recreate ${services} + else + echo "all services ${services} are already running" + fi + + # do not exit when following commands fail, so we can intercept exit code & tear down docker + set +e + + # setup environment variables and run args + export_env + "$@" + # save return code for later + code=$? + + # performs cleanup as necessary + cleanup ${services} + sleep 1 + exit ${code} +} + +# Main entry point +main() { + if ! docker ps >/dev/null 2>&1; then + echo "Docker unavailable. Running on host." + main_native $@ + else + main_docker $@ + fi +} diff --git a/packages/internal/dev-infra/docker-compose.yaml b/packages/internal/dev-infra/docker-compose.yaml new file mode 100644 index 0000000..930cb08 --- /dev/null +++ b/packages/internal/dev-infra/docker-compose.yaml @@ -0,0 +1,48 @@ +services: + # An ephermerally-stored postgres database for single-use test runs + db_test: &db_test + image: postgres:14.4-alpine + environment: + - POSTGRES_USER=pg + - POSTGRES_PASSWORD=password + ports: + - '5433:5432' + # Healthcheck ensures db is queryable when `docker-compose up --wait` completes + healthcheck: + test: 'pg_isready -U pg' + interval: 500ms + timeout: 10s + retries: 20 + # A persistently-stored postgres database + db: + <<: *db_test + ports: + - '5432:5432' + healthcheck: + disable: true + volumes: + - atp_db:/var/lib/postgresql/data + # An ephermerally-stored redis cache for single-use test runs + redis_test: &redis_test + image: redis:7.0-alpine + ports: + - '6380:6379' + # Healthcheck ensures redis is queryable when `docker-compose up --wait` completes + healthcheck: + test: ['CMD-SHELL', '[ "$$(redis-cli ping)" = "PONG" ]'] + interval: 500ms + timeout: 10s + retries: 20 + # A persistently-stored redis cache + redis: + <<: *redis_test + command: redis-server --save 60 1 --loglevel warning + ports: + - '6379:6379' + healthcheck: + disable: true + volumes: + - atp_redis:/data +volumes: + atp_db: + atp_redis: diff --git a/packages/internal/dev-infra/with-test-db.sh b/packages/internal/dev-infra/with-test-db.sh new file mode 100755 index 0000000..cc08349 --- /dev/null +++ b/packages/internal/dev-infra/with-test-db.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +# Example usage: +# ./with-test-db.sh psql postgresql://pg:password@localhost:5433/postgres -c 'select 1;' + +dir=$(dirname $0) +. ${dir}/_common.sh + +SERVICES="db_test" main "$@" diff --git a/packages/internal/dev-infra/with-test-redis-and-db.sh b/packages/internal/dev-infra/with-test-redis-and-db.sh new file mode 100755 index 0000000..c2b0c75 --- /dev/null +++ b/packages/internal/dev-infra/with-test-redis-and-db.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +# Example usage: +# ./with-test-redis-and-db.sh psql postgresql://pg:password@localhost:5433/postgres -c 'select 1;' +# ./with-test-redis-and-db.sh redis-cli -h localhost -p 6380 ping + +dir=$(dirname $0) +. ${dir}/_common.sh + +SERVICES="db_test redis_test" main "$@" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 809dab8..ae1e670 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,9 +94,9 @@ importers: specifier: ^2.0.6 version: 2.0.6 devDependencies: - '@atcute/internal-dev-env': - specifier: workspace:* - version: link:../internal/dev-env + '@atproto/dev-env': + specifier: ^0.3.93 + version: 0.3.104 '@tsky/lexicons': specifier: workspace:* version: link:../lexicons @@ -119,34 +119,6 @@ importers: specifier: ^3.0.6 version: 3.0.6(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.2)(yaml@2.7.0) - packages/internal/dev-env: - dependencies: - '@atproto/crypto': - specifier: ^0.4.4 - version: 0.4.4 - '@atproto/identity': - specifier: ^0.4.6 - version: 0.4.6 - '@atproto/pds': - specifier: ^0.4.94 - version: 0.4.94 - '@did-plc/server': - specifier: ^0.0.1 - version: 0.0.1 - axios: - specifier: ^1.7.9 - version: 1.7.9 - get-port: - specifier: ^7.1.0 - version: 7.1.0 - uint8arrays: - specifier: ^5.1.0 - version: 5.1.0 - devDependencies: - typescript: - specifier: 'catalog:' - version: 5.7.2 - packages/lex-cli: dependencies: clipanion: @@ -271,12 +243,12 @@ packages: '@atcute/client@2.0.6': resolution: {integrity: sha512-mhdqEicGUx0s5HTFOLpz91rcLS9j/g63de0nmAqv7blhU3j+xBf4le54qr2YIXNfnReZI7EwLYLX/YIBez4LGA==} - '@atproto-labs/fetch-node@0.1.7': - resolution: {integrity: sha512-vZ627PQqVGiBmPxulnviIGvvBPpTdzOcnfU1WcLeES3E0WjNxRGQqFaodBl5Zc4cj3QSPG/KC6wPcj/rjhbDrQ==} + '@atproto-labs/fetch-node@0.1.8': + resolution: {integrity: sha512-OOTIhZNPEDDm7kaYU8iYRgzM+D5n3mP2iiBSyKuLakKTaZBL5WwYlUsJVsqX26SnUXtGEroOJEVJ6f66OcG80w==} engines: {node: '>=18.7.0'} - '@atproto-labs/fetch@0.2.1': - resolution: {integrity: sha512-V22/7C7r+FfIDZA/BVn5UeuK5JccDp7nOiRfp5JITpVw2OXQbVfd8kywN7voWvPXw4sjd4cHoIPgQa0wvQGenQ==} + '@atproto-labs/fetch@0.2.2': + resolution: {integrity: sha512-QyafkedbFeVaN20DYUpnY2hcArYxjdThPXbYMqOSoZhcvkrUqaw4xDND4wZB5TBD9cq2yqe9V6mcw9P4XQKQuQ==} '@atproto-labs/pipe@0.1.0': resolution: {integrity: sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w==} @@ -287,14 +259,23 @@ packages: '@atproto-labs/simple-store@0.1.2': resolution: {integrity: sha512-9vTNvyPPBs44tKVFht16wGlilW8u4wpEtKwLkWbuNEh3h9TTQ8zjVhEoGZh/v73G4Otr9JUOSIq+/5+8OZD2mQ==} - '@atproto-labs/xrpc-utils@0.0.6': - resolution: {integrity: sha512-jfxf7KyNYIFm7gceq/Kh3dw/QBMgUd3u6dzU4C6cSa5pc0DrAeYVsgXDRv39dtXJGAYzzZoHxjve/ITkITm5ug==} + '@atproto-labs/xrpc-utils@0.0.9': + resolution: {integrity: sha512-74YM/MfGsbDK6lA10qMnOJXgeg8t39S/1T/SCAePmZSs6vvAHWcrRS0z9LYO9CxUPg9gwr+ojx4rWWiWWvGdoA==} - '@atproto/api@0.13.35': - resolution: {integrity: sha512-vsEfBj0C333TLjDppvTdTE0IdKlXuljKSveAeI4PPx/l6eUKNnDTsYxvILtXUVzwUlTDmSRqy5O4Ryh78n1b7g==} + '@atproto/api@0.14.12': + resolution: {integrity: sha512-EWz/9HotYzAz+woeNWvtt6o4ocGwF0HDHr2h2xxGaXAjSR7+tFOsr37/uBjzob3BrLBBwV81iTWNCbW/1tJAgg==} - '@atproto/aws@0.2.14': - resolution: {integrity: sha512-lDdF/7s4vheWnGjZ7V9AIkc2QDy8X0VBXv8UrcRbryPYeMppuXjwOXld7qEG1sqT/DDrJ2wbDvcVKA64Y+YNrg==} + '@atproto/aws@0.2.18': + resolution: {integrity: sha512-FjLQxdVqWp8Xx4XOWVqF3O5cSOqSlMnJNMcnFDNHkTVV820ytO3SzFdOXpoLDZF/agrEUAd3EP/pAIASx28NVA==} + engines: {node: '>=18.7.0'} + + '@atproto/bsky@0.0.129': + resolution: {integrity: sha512-NlQp3yr71nqWywUgrs5arCb9uGDaW03TONd4N2iXObFFc9wSN6l08SQ4iNdTHyq38Cx7PhNnJwceXlqogWrFJg==} + engines: {node: '>=18.7.0'} + hasBin: true + + '@atproto/bsync@0.0.16': + resolution: {integrity: sha512-UpmpEl0wJ2BncL+kdU+IpJhlKyJKNhh+miO/ZRME2J89H2dYf8WM2wzK536JDpSCaHccxn7Gy383+BDm1fSlmQ==} engines: {node: '>=18.7.0'} '@atproto/common-web@0.4.0': @@ -317,44 +298,68 @@ packages: resolution: {integrity: sha512-Yq9+crJ7WQl7sxStVpHgie5Z51R05etaK9DLWYG/7bR5T4bhdcIgF6IfklLShtZwLYdVVj+K15s0BqW9a8PSDA==} engines: {node: '>=18.7.0'} + '@atproto/dev-env@0.3.104': + resolution: {integrity: sha512-PKmD55M3aXmtElsmLTddlSXsPM0vGEQLgaIt30ehJ+8Ni/SjFTBXHjt/xbTfyCrApxvOLkNVwZ7/GuiibjQzNg==} + engines: {node: '>=18.7.0'} + hasBin: true + + '@atproto/did@0.1.5': + resolution: {integrity: sha512-8+1D08QdGE5TF0bB0vV8HLVrVZJeLNITpRTUVEoABNMRaUS7CoYSVb0+JNQDeJIVmqMjOL8dOjvCUDkp3gEaGQ==} + '@atproto/identity@0.4.6': resolution: {integrity: sha512-fJq/cIp9MOgHxZfxuyki6mobk0QxRnbts53DstRixlvb5mOoxwttb9Gp6A8u9q49zBsfOmXNTHmP97I9iMHmTQ==} engines: {node: '>=18.7.0'} - '@atproto/jwk-jose@0.1.4': - resolution: {integrity: sha512-JzLn1wUzuLfweznSECdTjSHTxQBEz7Q8oJ4XKjRNludqzyJW8etEH00l1WolLipFxoj1QCG9qy00JmlC59Y6Rw==} + '@atproto/jwk-jose@0.1.5': + resolution: {integrity: sha512-piYZ3ohKhRiGlD6/bZCV/Ed3lIi7CVd6txbofEHik22EkYWK0nWKoEriCUSTssSylwFzeOq2r31Ut16WcJoghw==} + + '@atproto/jwk@0.1.4': + resolution: {integrity: sha512-dSRuEi0FbxL5ln6hEFHp5ZW01xbQH9yJi5odZaEYpcA6beZHf/bawlU12CQy/CDsbC3FxSqrBw7Q2t7mvdSBqw==} - '@atproto/jwk@0.1.3': - resolution: {integrity: sha512-5rBgA8Fk4fg6MfNyEQvUnwq1MRn5xZOXYj4oxLuZ549XeNp2Rm2v+psuEkICD+o6pfIoMX4Hw7UTlXDrpsKKlQ==} + '@atproto/lexicon@0.4.9': + resolution: {integrity: sha512-/tmEuHQFr51V2V7EAVJzaA40sqJ7ylAZpR962VbOsPtmcdOHvezbjVHYEMXgfb927hS+xqbVyzBTbu5w9v8prA==} - '@atproto/lexicon@0.4.6': - resolution: {integrity: sha512-RbiwXcnTuLp9vQrNoQ7xly8HyifKkovqCYtbfXVwqdylWYKPhmRsYkRfcPNv/lILhT9Lm0GVnxNwGGwvvgIsfA==} + '@atproto/oauth-provider-api@0.0.1': + resolution: {integrity: sha512-I4NABGdcyVbAukAq/KwEP20f0eQDb/3DjKsRFGeToKJ7QYP95ZwxMUL0ULtKytbAvIi5D9B4FMsWFIuS3DA9/w==} + + '@atproto/oauth-provider-ui@0.0.2': + resolution: {integrity: sha512-6vo+rX4mccFA/iVD0oDoh2ZDiWKWTs4outDpQFa+WexGfg2ULj2pwBmR9Vfs9CGedjCttKofrsepAo0Dt8Cchg==} + engines: {node: '>=18.7.0'} - '@atproto/oauth-provider@0.2.17': - resolution: {integrity: sha512-fvEbONJfjDRqQoIkB76n1cLz7y6f99Fhgs8h2u1LNZak1p95JZs3Tc5HsDhmUHo2Yk9h22CIwMRRjHImU/m1Nw==} + '@atproto/oauth-provider@0.6.1': + resolution: {integrity: sha512-jcbMaAhfFF6vr1vERB6/RtoWxmh70mw8ta74g0X+PKAJ8Iww/f6TfzKdFYuGhkGkopLEHWWJvT0QZ95STiUXxA==} engines: {node: '>=18.7.0'} - '@atproto/oauth-types@0.2.3': - resolution: {integrity: sha512-M+0WW/alS2BfhKtwvdU3rSaLoycw6kTH1kGKeyDdmb/xN/8QjU7T6dkJe+wX4NC7F23xdKfti9DZhBpEtn+/kg==} + '@atproto/oauth-types@0.2.4': + resolution: {integrity: sha512-V2LnlXi1CSmBQWTQgDm8l4oN7xYxlftVwM7hrvYNP+Jxo3Ozfe0QLK1Wy/CH6/ZqzrBBhYvcbf4DJYTUwPA+hw==} - '@atproto/pds@0.4.94': - resolution: {integrity: sha512-+yjXOzsD5nyofYFdAXLnapXP+CA1nTa867WPu4vck8s0OEFkLuMO41yFnD3NqBVjwCuOP9Xxp59Tje0Aq/K94w==} + '@atproto/ozone@0.1.91': + resolution: {integrity: sha512-uQfn1VlEIbbmsmcM++6/T1u+WqzmbYrHEmUgBrvzD6jSZmdJKL+EuCOwkWnmK3l6QT7webo9GYAGpblyUxvbnQ==} engines: {node: '>=18.7.0'} hasBin: true - '@atproto/repo@0.6.4': - resolution: {integrity: sha512-76uffFi5fanhlYVFeif7OfvDVahUeVtcY9eZLxpdUC6yf+88wRHLZbVmUwq7sfLIFlX1cP/syXMMlnI7TQVlxQ==} + '@atproto/pds@0.4.111': + resolution: {integrity: sha512-MZMilVGeN8lobi0P3WgNNh2TqGC2SYTA+kVa46R+qYJaAg5aNWT0wILj9zSKpZi5/cyrpuLn6rlOWiSXuDcSHA==} + engines: {node: '>=18.7.0'} + hasBin: true + + '@atproto/repo@0.7.2': + resolution: {integrity: sha512-PsAbkAl2+ITQIHFAaOIQzGD9QDUeV9aWKTU6crOpDT3JXWyEffAv8JWamQ9Zjh3k7CMKRDUqyCXO6uizmPPNgw==} + engines: {node: '>=18.7.0'} + + '@atproto/sync@0.1.18': + resolution: {integrity: sha512-RO9HqrEWEbItrOIHFV1Az6tPzvpQuzS8bWmrW49l0KdY+fAIN+x2JPkkjveBe7q460alDeTEkOPhjFt1IHQTyw==} engines: {node: '>=18.7.0'} - '@atproto/syntax@0.3.2': - resolution: {integrity: sha512-JLMhTbXER1Im98RrozfsLAZARGIAzKCZEm+Inh1IF00XU6tHcoGKS+HOw0Uy4R2r04yvxoFs8fswmwAhmMpMdw==} + '@atproto/syntax@0.4.0': + resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==} - '@atproto/xrpc-server@0.7.10': - resolution: {integrity: sha512-+Bl6v+C45iok9vI1go495PY6QWt7+GubEknY7Q3VX9y0bs5y9vsx1XuvEBonBimDN1bqFwffOIaNPw39y4guWw==} + '@atproto/xrpc-server@0.7.13': + resolution: {integrity: sha512-gaaAentq1lhAFBHwh2N0EhbNsb1mWrmEXoxmtuXp3uEV4Q7EMFaZYO25B9/Yos5oAsnpK54LIYUamHuJQVWGOA==} engines: {node: '>=18.7.0'} - '@atproto/xrpc@0.6.8': - resolution: {integrity: sha512-+KW0NcwdFyLziccYimX6tPkORiwwxlJPqlkVL9bJyj8nJ0aB8cyqo9HXkziMI+R6ansB1BuWQ0tfdPlLLwrUcA==} + '@atproto/xrpc@0.6.11': + resolution: {integrity: sha512-J2cZP8FjoDN0UkyTYBlCvKvxwBbDm4dld47u6FQK30RJy9YpSiUkdxJJ10NYqpi7JVny3M0qWQgpWJDV94+PdA==} '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} @@ -662,6 +667,9 @@ packages: cpu: [x64] os: [win32] + '@bufbuild/protobuf@1.10.0': + resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} cpu: [arm64] @@ -692,6 +700,29 @@ packages: cpu: [x64] os: [win32] + '@connectrpc/connect-express@1.6.1': + resolution: {integrity: sha512-iTMTBHWT8Q1chR1k/c8UcrFN5iunrAaoXMjqqrmdy9o0ZDee1o7SvF8XGpB7JsP+1kchrZ1Sig6pkRO9Ybhdbw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@bufbuild/protobuf': ^1.10.0 + '@connectrpc/connect': 1.6.1 + '@connectrpc/connect-node': 1.6.1 + + '@connectrpc/connect-node@1.6.1': + resolution: {integrity: sha512-DxcD1wsF/aX9GegjAtl7VbpiZNjVJozy87VbaFoN6AF0Ln1Q757r5dgV59Gz0wmlk5f17txUsrEr1f2inlnnAg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@bufbuild/protobuf': ^1.10.0 + '@connectrpc/connect': 1.6.1 + + '@connectrpc/connect@1.6.1': + resolution: {integrity: sha512-KchMDNtU4CDTdkyf0qG7ugJ6qHTOR/aI7XebYn3OTCNagaDYWiZUVKgRgwH79yeMkpNgvEUaXSK7wKjaBK9b/Q==} + peerDependencies: + '@bufbuild/protobuf': ^1.10.0 + + '@did-plc/lib@0.0.1': + resolution: {integrity: sha512-RkY5w9DbYMco3SjeepqIiMveqz35exjlVDipCs2gz9AXF4/cp9hvmrp9zUWEw2vny+FjV8vGEN7QpaXWaO6nhg==} + '@did-plc/lib@0.0.4': resolution: {integrity: sha512-Omeawq3b8G/c/5CtkTtzovSOnWuvIuCI4GTJNrt1AmCskwEQV7zbX5d6km1mjJNbE0gHuQPTVqZxLVqetNbfwA==} @@ -1194,9 +1225,22 @@ packages: resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@gerrit0/mini-shiki@1.27.2': resolution: {integrity: sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==} + '@grpc/grpc-js@1.13.2': + resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + '@hapi/accept@6.0.3': resolution: {integrity: sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw==} @@ -1386,6 +1430,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@noble/curves@1.8.1': resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} engines: {node: ^14.21.3 || >=16} @@ -1413,6 +1460,36 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -2005,6 +2082,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2308,6 +2388,9 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -2421,10 +2504,18 @@ packages: peerDependencies: typanion: '*' + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + cockatiel@3.2.1: + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} + engines: {node: '>=16'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -2505,15 +2596,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -2589,6 +2671,10 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2729,6 +2815,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + etcd3@1.1.2: + resolution: {integrity: sha512-YIampCz1/OmrVo/tR3QltAVUtYCQQOSFoqmHKKeoHbalm+WdXe3l4rhLIylklu8EzR/I3PBiOF4dC847dDskKg==} + engines: {node: '>=16'} + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -2866,9 +2956,9 @@ packages: resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} - engines: {node: '>=16'} + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} @@ -3010,6 +3100,9 @@ packages: resolution: {integrity: sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==} engines: {node: '>=12.22.0'} + ip3country@5.0.0: + resolution: {integrity: sha512-lcFLMFU4eO1Z7tIpbVFZkaZ5ltqpeaRx7L9NsAbA9uA7/O/rj3RF8+evE5gDitooaTTIqjdzZrenFO/OOxQ2ew==} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -3120,10 +3213,6 @@ packages: key-encoder@2.0.3: resolution: {integrity: sha512-fgBtpAGIr/Fy5/+ZLQZIPPhsZEcbSlYu/Wu96tNDFNSjSACw5lEIOFeaVdQ/iwrb8oxjlWi6wmWdH76hV6GZjg==} - keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3135,6 +3224,9 @@ packages: resolution: {integrity: sha512-TH+b56pVXQq0tsyooYLeNfV11j6ih7D50dyN8tkM0e7ndiUH28Nziojiog3qRFlmEj9XePYdZUrNJ2079Qjdow==} engines: {node: '>=14.0.0'} + lande@1.0.10: + resolution: {integrity: sha512-yT52DQh+UV2pEp08jOYrA4drDv0DbjpiRyZYgl25ak9G2cVR2AimzrqkYQWrD9a7Ud+qkAcaiDDoNH9DXfHPmw==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3210,6 +3302,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -3219,6 +3314,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + long@5.3.1: + resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} + loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} @@ -3371,12 +3469,12 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multiformats@13.3.1: - resolution: {integrity: sha512-QxowxTNwJ3r5RMctoGA5p13w5RbRT2QDkoM+yFlqfLiioBp78nhDjnRLvmSBI9+KAqN4VdgOVWM9c0CHd86m3g==} - multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + murmurhash@2.0.1: + resolution: {integrity: sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==} + nano-staged@0.8.0: resolution: {integrity: sha512-QSEqPGTCJbkHU2yLvfY6huqYPjdBrOaTMKatO1F8nCSrkQGXeKwtCiCnsdxnuMhbg3DTVywKaeWLGCE5oJpq0g==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3408,6 +3506,15 @@ packages: resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} engines: {node: '>=10'} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-gyp-build-optional-packages@5.1.1: resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} hasBin: true @@ -3646,6 +3753,10 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -3738,6 +3849,10 @@ packages: regex@5.0.2: resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3899,6 +4014,9 @@ packages: standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + statsig-node@5.33.0: + resolution: {integrity: sha512-gyJhGnGkzZKyswvoS/bQfMQlEjJHWlVA1pvOl9KtyfLpqlk8i0V+fOqmFUqGHiDm91jfQVH6y385xz3t/shEiA==} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -3946,6 +4064,10 @@ packages: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} + structured-headers@1.0.1: + resolution: {integrity: sha512-QYBxdBtA4Tl5rFPuqmbmdrS9kbtren74RTJTcs0VSQNVV5iRhJD4QlYTLD0+81SBwUQctjEQzjTRI3WG4DzICA==} + engines: {node: '>= 14', npm: '>=6'} + superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -4020,6 +4142,12 @@ packages: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} + toygrad@2.6.0: + resolution: {integrity: sha512-g4zBmlSbvzOE5FOILxYkAybTSxijKLkj1WoNqVGnbMcWDyj4wWQ+eYSr3ik7XOpIgMq/7eBcPRTJX3DM2E0YMg==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4032,10 +4160,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - tsx@4.19.2: resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} @@ -4092,6 +4216,10 @@ packages: engines: {node: '>=14.17'} hasBin: true + ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -4103,12 +4231,13 @@ packages: uint8arrays@3.0.0: resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} - uint8arrays@5.1.0: - resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} - undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} engines: {node: '>=18.17'} @@ -4148,6 +4277,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -4300,6 +4433,12 @@ packages: typescript: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4344,6 +4483,10 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4356,6 +4499,14 @@ packages: engines: {node: '>= 14'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -4480,19 +4631,17 @@ snapshots: '@atcute/client@2.0.6': {} - '@atproto-labs/fetch-node@0.1.7': + '@atproto-labs/fetch-node@0.1.8': dependencies: - '@atproto-labs/fetch': 0.2.1 + '@atproto-labs/fetch': 0.2.2 '@atproto-labs/pipe': 0.1.0 ipaddr.js: 2.2.0 psl: 1.15.0 undici: 6.21.1 - '@atproto-labs/fetch@0.2.1': + '@atproto-labs/fetch@0.2.2': dependencies: '@atproto-labs/pipe': 0.1.0 - optionalDependencies: - zod: 3.24.1 '@atproto-labs/pipe@0.1.0': {} @@ -4503,31 +4652,31 @@ snapshots: '@atproto-labs/simple-store@0.1.2': {} - '@atproto-labs/xrpc-utils@0.0.6': + '@atproto-labs/xrpc-utils@0.0.9': dependencies: - '@atproto/xrpc': 0.6.8 - '@atproto/xrpc-server': 0.7.10 + '@atproto/xrpc': 0.6.11 + '@atproto/xrpc-server': 0.7.13 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@atproto/api@0.13.35': + '@atproto/api@0.14.12': dependencies: '@atproto/common-web': 0.4.0 - '@atproto/lexicon': 0.4.6 - '@atproto/syntax': 0.3.2 - '@atproto/xrpc': 0.6.8 + '@atproto/lexicon': 0.4.9 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc': 0.6.11 await-lock: 2.2.2 multiformats: 9.9.0 tlds: 1.255.0 zod: 3.24.1 - '@atproto/aws@0.2.14': + '@atproto/aws@0.2.18': dependencies: '@atproto/common': 0.4.8 '@atproto/crypto': 0.4.4 - '@atproto/repo': 0.6.4 + '@atproto/repo': 0.7.2 '@aws-sdk/client-cloudfront': 3.744.0 '@aws-sdk/client-kms': 3.744.0 '@aws-sdk/client-s3': 3.744.0 @@ -4539,6 +4688,71 @@ snapshots: transitivePeerDependencies: - aws-crt + '@atproto/bsky@0.0.129': + dependencies: + '@atproto-labs/fetch-node': 0.1.8 + '@atproto-labs/xrpc-utils': 0.0.9 + '@atproto/api': 0.14.12 + '@atproto/common': 0.4.8 + '@atproto/crypto': 0.4.4 + '@atproto/did': 0.1.5 + '@atproto/identity': 0.4.6 + '@atproto/lexicon': 0.4.9 + '@atproto/repo': 0.7.2 + '@atproto/sync': 0.1.18 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc-server': 0.7.13 + '@bufbuild/protobuf': 1.10.0 + '@connectrpc/connect': 1.6.1(@bufbuild/protobuf@1.10.0) + '@connectrpc/connect-express': 1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect-node@1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)))(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)) + '@connectrpc/connect-node': 1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)) + '@did-plc/lib': 0.0.1 + '@types/http-errors': 2.0.4 + compression: 1.7.5 + cors: 2.8.5 + etcd3: 1.1.2 + express: 4.21.2 + http-errors: 2.0.0 + http-terminator: 3.2.0 + ioredis: 5.5.0 + jose: 5.9.6 + key-encoder: 2.0.3 + kysely: 0.22.0 + multiformats: 9.9.0 + murmurhash: 2.0.1 + p-queue: 6.6.2 + pg: 8.13.1 + pino: 8.21.0 + pino-http: 8.6.1 + sharp: 0.33.5 + statsig-node: 5.33.0 + structured-headers: 1.0.1 + typed-emitter: 2.1.0 + uint8arrays: 3.0.0 + undici: 6.21.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - utf-8-validate + + '@atproto/bsync@0.0.16': + dependencies: + '@atproto/common': 0.4.8 + '@atproto/syntax': 0.4.0 + '@bufbuild/protobuf': 1.10.0 + '@connectrpc/connect': 1.6.1(@bufbuild/protobuf@1.10.0) + '@connectrpc/connect-node': 1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)) + http-terminator: 3.2.0 + kysely: 0.22.0 + pg: 8.13.1 + pino-http: 8.6.1 + typed-emitter: 2.1.0 + transitivePeerDependencies: + - pg-native + '@atproto/common-web@0.4.0': dependencies: graphemer: 1.4.0 @@ -4583,73 +4797,151 @@ snapshots: '@noble/hashes': 1.7.1 uint8arrays: 3.0.0 + '@atproto/dev-env@0.3.104': + dependencies: + '@atproto/api': 0.14.12 + '@atproto/bsky': 0.0.129 + '@atproto/bsync': 0.0.16 + '@atproto/common-web': 0.4.0 + '@atproto/crypto': 0.4.4 + '@atproto/identity': 0.4.6 + '@atproto/lexicon': 0.4.9 + '@atproto/ozone': 0.1.91 + '@atproto/pds': 0.4.111 + '@atproto/sync': 0.1.18 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc-server': 0.7.13 + '@did-plc/lib': 0.0.1 + '@did-plc/server': 0.0.1 + dotenv: 16.4.7 + express: 4.21.2 + get-port: 5.1.1 + multiformats: 9.9.0 + uint8arrays: 3.0.0 + undici: 6.21.1 + transitivePeerDependencies: + - aws-crt + - bufferutil + - debug + - encoding + - pg-native + - supports-color + - utf-8-validate + + '@atproto/did@0.1.5': + dependencies: + zod: 3.24.1 + '@atproto/identity@0.4.6': dependencies: '@atproto/common-web': 0.4.0 '@atproto/crypto': 0.4.4 - '@atproto/jwk-jose@0.1.4': + '@atproto/jwk-jose@0.1.5': dependencies: - '@atproto/jwk': 0.1.3 + '@atproto/jwk': 0.1.4 jose: 5.9.6 - '@atproto/jwk@0.1.3': + '@atproto/jwk@0.1.4': dependencies: multiformats: 9.9.0 zod: 3.24.1 - '@atproto/lexicon@0.4.6': + '@atproto/lexicon@0.4.9': dependencies: '@atproto/common-web': 0.4.0 - '@atproto/syntax': 0.3.2 + '@atproto/syntax': 0.4.0 iso-datestring-validator: 2.2.2 multiformats: 9.9.0 zod: 3.24.1 - '@atproto/oauth-provider@0.2.17': + '@atproto/oauth-provider-api@0.0.1': dependencies: - '@atproto-labs/fetch': 0.2.1 - '@atproto-labs/fetch-node': 0.1.7 + '@atproto/oauth-types': 0.2.4 + + '@atproto/oauth-provider-ui@0.0.2': {} + + '@atproto/oauth-provider@0.6.1': + dependencies: + '@atproto-labs/fetch': 0.2.2 + '@atproto-labs/fetch-node': 0.1.8 '@atproto-labs/pipe': 0.1.0 '@atproto-labs/simple-store': 0.1.2 '@atproto-labs/simple-store-memory': 0.1.2 '@atproto/common': 0.4.8 - '@atproto/jwk': 0.1.3 - '@atproto/jwk-jose': 0.1.4 - '@atproto/oauth-types': 0.2.3 + '@atproto/jwk': 0.1.4 + '@atproto/jwk-jose': 0.1.5 + '@atproto/oauth-provider-api': 0.0.1 + '@atproto/oauth-provider-ui': 0.0.2 + '@atproto/oauth-types': 0.2.4 + '@atproto/syntax': 0.4.0 '@hapi/accept': 6.0.3 + '@hapi/address': 5.1.1 '@hapi/bourne': 3.0.0 '@hapi/content': 6.0.0 cookie: 0.6.0 + disposable-email-domains-js: 1.9.0 + forwarded: 0.2.0 http-errors: 2.0.0 ioredis: 5.5.0 jose: 5.9.6 - keygrip: 1.1.0 psl: 1.15.0 zod: 3.24.1 transitivePeerDependencies: - supports-color - '@atproto/oauth-types@0.2.3': + '@atproto/oauth-types@0.2.4': dependencies: - '@atproto/jwk': 0.1.3 + '@atproto/jwk': 0.1.4 zod: 3.24.1 - '@atproto/pds@0.4.94': + '@atproto/ozone@0.1.91': dependencies: - '@atproto-labs/fetch-node': 0.1.7 - '@atproto-labs/xrpc-utils': 0.0.6 - '@atproto/api': 0.13.35 - '@atproto/aws': 0.2.14 + '@atproto/api': 0.14.12 '@atproto/common': 0.4.8 '@atproto/crypto': 0.4.4 '@atproto/identity': 0.4.6 - '@atproto/lexicon': 0.4.6 - '@atproto/oauth-provider': 0.2.17 - '@atproto/repo': 0.6.4 - '@atproto/syntax': 0.3.2 - '@atproto/xrpc': 0.6.8 - '@atproto/xrpc-server': 0.7.10 + '@atproto/lexicon': 0.4.9 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc': 0.6.11 + '@atproto/xrpc-server': 0.7.13 + '@did-plc/lib': 0.0.1 + compression: 1.7.5 + cors: 2.8.5 + express: 4.21.2 + http-terminator: 3.2.0 + kysely: 0.22.0 + lande: 1.0.10 + multiformats: 9.9.0 + p-queue: 6.6.2 + pg: 8.13.1 + pino-http: 8.6.1 + structured-headers: 1.0.1 + typed-emitter: 2.1.0 + uint8arrays: 3.0.0 + undici: 6.21.1 + transitivePeerDependencies: + - bufferutil + - debug + - pg-native + - supports-color + - utf-8-validate + + '@atproto/pds@0.4.111': + dependencies: + '@atproto-labs/fetch-node': 0.1.8 + '@atproto-labs/xrpc-utils': 0.0.9 + '@atproto/api': 0.14.12 + '@atproto/aws': 0.2.18 + '@atproto/common': 0.4.8 + '@atproto/crypto': 0.4.4 + '@atproto/identity': 0.4.6 + '@atproto/lexicon': 0.4.9 + '@atproto/oauth-provider': 0.6.1 + '@atproto/repo': 0.7.2 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc': 0.6.11 + '@atproto/xrpc-server': 0.7.13 '@did-plc/lib': 0.0.4 '@hapi/address': 5.1.1 better-sqlite3: 10.1.0 @@ -4685,26 +4977,42 @@ snapshots: - supports-color - utf-8-validate - '@atproto/repo@0.6.4': + '@atproto/repo@0.7.2': dependencies: '@atproto/common': 0.4.8 '@atproto/common-web': 0.4.0 '@atproto/crypto': 0.4.4 - '@atproto/lexicon': 0.4.6 + '@atproto/lexicon': 0.4.9 '@ipld/car': 3.2.4 '@ipld/dag-cbor': 7.0.3 multiformats: 9.9.0 uint8arrays: 3.0.0 zod: 3.24.1 - '@atproto/syntax@0.3.2': {} + '@atproto/sync@0.1.18': + dependencies: + '@atproto/common': 0.4.8 + '@atproto/identity': 0.4.6 + '@atproto/lexicon': 0.4.9 + '@atproto/repo': 0.7.2 + '@atproto/syntax': 0.4.0 + '@atproto/xrpc-server': 0.7.13 + multiformats: 9.9.0 + p-queue: 6.6.2 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@atproto/syntax@0.4.0': {} - '@atproto/xrpc-server@0.7.10': + '@atproto/xrpc-server@0.7.13': dependencies: '@atproto/common': 0.4.8 '@atproto/crypto': 0.4.4 - '@atproto/lexicon': 0.4.6 - '@atproto/xrpc': 0.6.8 + '@atproto/lexicon': 0.4.9 + '@atproto/xrpc': 0.6.11 cbor-x: 1.6.0 express: 4.21.2 http-errors: 2.0.0 @@ -4718,9 +5026,9 @@ snapshots: - supports-color - utf-8-validate - '@atproto/xrpc@0.6.8': + '@atproto/xrpc@0.6.11': dependencies: - '@atproto/lexicon': 0.4.6 + '@atproto/lexicon': 0.4.9 zod: 3.24.1 '@aws-crypto/crc32@5.2.0': @@ -5437,6 +5745,8 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true + '@bufbuild/protobuf@1.10.0': {} + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': optional: true @@ -5455,6 +5765,34 @@ snapshots: '@cbor-extract/cbor-extract-win32-x64@2.2.0': optional: true + '@connectrpc/connect-express@1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect-node@1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)))(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0))': + dependencies: + '@bufbuild/protobuf': 1.10.0 + '@connectrpc/connect': 1.6.1(@bufbuild/protobuf@1.10.0) + '@connectrpc/connect-node': 1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)) + + '@connectrpc/connect-node@1.6.1(@bufbuild/protobuf@1.10.0)(@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0))': + dependencies: + '@bufbuild/protobuf': 1.10.0 + '@connectrpc/connect': 1.6.1(@bufbuild/protobuf@1.10.0) + undici: 5.29.0 + + '@connectrpc/connect@1.6.1(@bufbuild/protobuf@1.10.0)': + dependencies: + '@bufbuild/protobuf': 1.10.0 + + '@did-plc/lib@0.0.1': + dependencies: + '@atproto/common': 0.1.0 + '@atproto/crypto': 0.1.0 + '@ipld/dag-cbor': 7.0.3 + axios: 1.7.9 + multiformats: 9.9.0 + uint8arrays: 3.0.0 + zod: 3.24.1 + transitivePeerDependencies: + - debug + '@did-plc/lib@0.0.4': dependencies: '@atproto/common': 0.1.1 @@ -5776,12 +6114,26 @@ snapshots: '@eslint/core': 0.12.0 levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@gerrit0/mini-shiki@1.27.2': dependencies: '@shikijs/engine-oniguruma': 1.29.1 '@shikijs/types': 1.29.1 '@shikijs/vscode-textmate': 10.0.1 + '@grpc/grpc-js@1.13.2': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.1 + protobufjs: 7.4.0 + yargs: 17.7.2 + '@hapi/accept@6.0.3': dependencies: '@hapi/boom': 10.0.1 @@ -5942,6 +6294,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@js-sdsl/ordered-map@4.4.2': {} + '@noble/curves@1.8.1': dependencies: '@noble/hashes': 1.7.1 @@ -5965,6 +6319,29 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@rollup/plugin-alias@5.1.1(rollup@4.27.4)': optionalDependencies: rollup: 4.27.4 @@ -6602,6 +6979,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/http-errors@2.0.4': {} + '@types/json-schema@7.0.15': {} '@types/linkify-it@5.0.0': {} @@ -6979,6 +7358,8 @@ snapshots: big-integer@1.6.52: {} + bignumber.js@9.1.2: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -7114,8 +7495,16 @@ snapshots: dependencies: typanion: 3.14.0 + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cluster-key-slot@1.1.2: {} + cockatiel@3.2.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -7193,10 +7582,6 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7: - dependencies: - ms: 2.1.3 - debug@4.4.0: dependencies: ms: 2.1.3 @@ -7251,6 +7636,8 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 + dotenv@16.4.7: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 @@ -7470,6 +7857,13 @@ snapshots: etag@1.8.1: {} + etcd3@1.1.2: + dependencies: + '@grpc/grpc-js': 1.13.2 + '@grpc/proto-loader': 0.7.13 + bignumber.js: 9.1.2 + cockatiel: 3.2.1 + event-target-shim@5.0.1: {} eventemitter3@4.0.7: {} @@ -7631,7 +8025,7 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-port@7.1.0: {} + get-port@5.1.1: {} get-proto@1.0.1: dependencies: @@ -7790,7 +8184,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.7 + debug: 4.4.0 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -7800,6 +8194,8 @@ snapshots: transitivePeerDependencies: - supports-color + ip3country@5.0.0: {} + ipaddr.js@1.9.1: {} ipaddr.js@2.2.0: {} @@ -7900,10 +8296,6 @@ snapshots: bn.js: 4.12.1 elliptic: 6.6.1 - keygrip@1.1.0: - dependencies: - tsscmp: 1.0.6 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -7912,6 +8304,10 @@ snapshots: kysely@0.23.5: {} + lande@1.0.10: + dependencies: + toygrad: 2.6.0 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -7970,12 +8366,16 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.camelcase@4.3.0: {} + lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} lodash.merge@4.6.2: {} + long@5.3.1: {} + loupe@3.1.2: {} loupe@3.1.3: {} @@ -8114,10 +8514,10 @@ snapshots: ms@2.1.3: {} - multiformats@13.3.1: {} - multiformats@9.9.0: {} + murmurhash@2.0.1: {} + nano-staged@0.8.0: dependencies: picocolors: 1.1.1 @@ -8138,6 +8538,10 @@ snapshots: dependencies: semver: 7.6.3 + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-gyp-build-optional-packages@5.1.1: dependencies: detect-libc: 2.0.3 @@ -8374,6 +8778,21 @@ snapshots: property-information@6.5.0: {} + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.13.10 + long: 5.3.1 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -8466,6 +8885,8 @@ snapshots: dependencies: regex-utilities: 2.3.0 + require-directory@2.1.1: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -8701,6 +9122,15 @@ snapshots: standard-as-callback@2.1.0: {} + statsig-node@5.33.0: + dependencies: + ip3country: 5.0.0 + node-fetch: 2.7.0 + ua-parser-js: 1.0.40 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + statuses@2.0.1: {} std-env@3.8.0: {} @@ -8750,6 +9180,8 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 + structured-headers@1.0.1: {} + superjson@2.2.1: dependencies: copy-anything: 3.0.5 @@ -8823,6 +9255,10 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + toygrad@2.6.0: {} + + tr46@0.0.3: {} + trim-lines@3.0.1: {} ts-api-utils@2.0.1(typescript@5.7.2): @@ -8831,8 +9267,6 @@ snapshots: tslib@2.8.1: {} - tsscmp@1.0.6: {} - tsx@4.19.2: dependencies: esbuild: 0.23.1 @@ -8890,6 +9324,8 @@ snapshots: typescript@5.7.2: {} + ua-parser-js@1.0.40: {} + uc.micro@2.1.0: {} uglify-js@3.19.3: @@ -8899,12 +9335,12 @@ snapshots: dependencies: multiformats: 9.9.0 - uint8arrays@5.1.0: - dependencies: - multiformats: 13.3.1 - undici-types@6.20.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + undici@6.21.1: {} unist-util-is@6.0.0: @@ -8946,6 +9382,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@8.3.2: {} + uuid@9.0.1: {} varint@6.0.0: {} @@ -9108,6 +9546,13 @@ snapshots: optionalDependencies: typescript: 5.7.2 + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -9139,12 +9584,26 @@ snapshots: xtend@4.0.2: {} + y18n@5.0.8: {} + yallist@3.1.1: {} yallist@5.0.0: {} yaml@2.7.0: {} + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@0.1.0: {} zod@3.24.1: {}