From b5cb18d40c64432ed794c49d4ddb29c3ce657f6f Mon Sep 17 00:00:00 2001 From: Wess Cope Date: Thu, 22 Oct 2026 15:05:50 -0400 Subject: [PATCH] Use selective Atlas release libraries Pin the module closure and lockfile to reproducible GitHub assets, update compatible dependencies, and remove private source imports and runtime Git installation. Bump to 0.10.7. --- .dockerignore | 2 +- .github/workflows/atlaslibraries.yml | 20 ++ CLAUDE.md | 20 +- Dockerfile | 11 +- biome.json | 4 +- bun.lock | 200 ++++++++++++------ docs/ARCHITECTURE.md | 10 +- docs/CONFIGURATION.md | 4 +- package.json | 40 ++-- scripts/connect.ts | 3 +- scripts/team.ts | 3 +- src/actions/dispatch.ts | 4 +- src/actions/index.ts | 6 +- src/actions/primitives/route/copy.ts | 2 +- src/actions/primitives/route/move.ts | 2 +- src/actions/primitives/route/rename.ts | 2 +- src/actions/primitives/transform/compress.ts | 2 +- src/actions/primitives/transform/resize.ts | 2 +- src/actions/primitives/transform/thumbnail.ts | 2 +- src/actions/primitives/types.ts | 2 +- src/actions/primitives/util/folders.ts | 4 +- src/actions/quota.ts | 4 +- src/actions/stohr/organize.ts | 2 +- src/actions/stohr/resize.ts | 2 +- src/actions/types.ts | 2 +- src/actions/user/execute.ts | 4 +- src/actions/user/index.ts | 6 +- src/activity/index.ts | 4 +- src/admin/index.ts | 6 +- src/admin/users.ts | 8 +- src/ai/routes.ts | 6 +- src/apps/index.ts | 6 +- src/auth/deletion.ts | 6 +- src/auth/external.ts | 6 +- src/auth/guard.ts | 10 +- src/auth/index.ts | 9 +- src/auth/ldap/admin.ts | 4 +- src/auth/ldap/config.ts | 4 +- src/auth/ldap/index.ts | 4 +- src/auth/mfa.ts | 8 +- src/auth/oidc/admin.ts | 4 +- src/auth/oidc/config.ts | 4 +- src/auth/oidc/index.ts | 8 +- src/auth/passkeys.ts | 14 +- src/auth/password.ts | 8 +- src/auth/sessions.ts | 6 +- src/auth/social/index.ts | 8 +- src/auth/state.ts | 4 +- src/castle/guard.ts | 4 +- src/castle/index.ts | 6 +- src/collabs/index.ts | 6 +- src/comments/index.ts | 6 +- src/contact/index.ts | 6 +- src/dev.ts | 2 +- src/federation/files.ts | 6 +- src/federation/folders.ts | 6 +- src/federation/index.ts | 6 +- src/federation/invites.ts | 4 +- src/federation/keys.ts | 4 +- src/federation/membership.ts | 4 +- src/federation/pairing.ts | 6 +- src/federation/placement.ts | 4 +- src/federation/transport.ts | 8 +- src/files/index.ts | 6 +- src/folders/index.ts | 6 +- src/invites/index.ts | 6 +- src/mcp/index.ts | 4 +- src/mcp/servers.ts | 6 +- src/mcp/tools/index.ts | 2 +- src/mcp/tools/read.ts | 2 +- src/mcp/tools/share.ts | 4 +- src/mcp/tools/trash.ts | 2 +- src/mcp/tools/write.ts | 2 +- src/messages/index.ts | 6 +- src/messages/system.ts | 4 +- src/notifications/emit.ts | 4 +- src/notifications/index.ts | 6 +- src/oauth/authorize.ts | 6 +- src/oauth/clients.ts | 6 +- src/oauth/device.ts | 6 +- src/oauth/discovery.ts | 2 +- src/oauth/token.ts | 8 +- src/observability/health.ts | 4 +- src/observability/metrics.ts | 2 +- src/permissions/index.ts | 4 +- src/photos/index.ts | 6 +- src/public/index.ts | 6 +- src/s3/index.ts | 6 +- src/s3keys/index.ts | 6 +- src/scanning/index.ts | 4 +- src/schema/index.ts | 2 +- src/search/content/indexer.ts | 4 +- src/search/content/routes.ts | 4 +- src/search/index.ts | 6 +- src/security/audit.ts | 2 +- src/security/credentials.ts | 2 +- src/security/owner.ts | 6 +- src/security/ratelimit.ts | 2 +- src/security/sessions.ts | 6 +- src/security/totpclaims.ts | 2 +- src/server.ts | 12 +- src/settings/index.ts | 8 +- src/shares/index.ts | 8 +- src/spaces/index.ts | 6 +- src/sso/index.ts | 12 +- src/start.ts | 2 +- src/storage/s3/index.ts | 2 +- src/teams/admin.ts | 8 +- src/teams/domains.ts | 6 +- src/teams/guards.ts | 8 +- src/teams/members.ts | 4 +- src/teams/request.ts | 2 +- src/teams/resolve.ts | 4 +- src/teams/routes.ts | 8 +- src/teams/tls.ts | 4 +- src/teams/users.ts | 6 +- src/trash/index.ts | 6 +- src/uploads/finalize.ts | 4 +- src/uploads/index.ts | 6 +- src/uploads/quota.ts | 2 +- src/uploads/s3.ts | 2 +- src/usage/index.ts | 4 +- src/users/index.ts | 8 +- src/util/json/index.ts | 4 +- src/util/limitbody/index.ts | 4 +- src/webdav/auth.ts | 4 +- src/webdav/index.ts | 8 +- src/webdav/paths.ts | 4 +- src/webdav/settings.ts | 6 +- src/webhooks/dispatch.ts | 4 +- src/webhooks/index.ts | 6 +- tests/account_deletion.test.ts | 2 +- tests/auth.test.ts | 4 +- tests/authboundaries.test.ts | 4 +- tests/content_search.test.ts | 2 +- tests/discoverability.test.ts | 2 +- tests/external_auth.test.ts | 2 +- tests/federation_accept.test.ts | 2 +- tests/federationsecurity.test.ts | 4 +- tests/fileboundaries.test.ts | 2 +- tests/filescan.test.ts | 2 +- tests/folders.test.ts | 2 +- tests/guard_tokens.test.ts | 5 +- tests/helpers/http.ts | 4 +- tests/helpers/protocolapp.ts | 4 +- tests/limitbody.test.ts | 2 +- tests/mcp.test.ts | 2 +- tests/mcpsecurity.test.ts | 2 +- tests/oauth.test.ts | 2 +- tests/oauth_device.test.ts | 2 +- tests/oidcsecurity.test.ts | 2 +- tests/paging.test.ts | 2 +- tests/passkeysecurity.test.ts | 4 +- tests/quotas.test.ts | 2 +- tests/s3gateway.test.ts | 4 +- tests/sessions.test.ts | 4 +- tests/setup.ts | 6 +- tests/shares.test.ts | 4 +- tests/signup_collabs.test.ts | 2 +- tests/spaces.test.ts | 2 +- tests/teams_admin.test.ts | 2 +- tests/teams_auth.test.ts | 2 +- tests/teams_hardening.test.ts | 2 +- tests/teams_isolation_resources.test.ts | 2 +- tests/teams_isolation_spaces.test.ts | 2 +- tests/teams_isolation_users.test.ts | 2 +- tests/teams_protocols_auth.test.ts | 2 +- tests/teams_protocols_quota.test.ts | 2 +- tests/teams_protocols_rootonly.test.ts | 2 +- tests/transportsecurity.test.ts | 2 +- tests/uploads.test.ts | 4 +- tests/webdav.test.ts | 2 +- tests/webhooks.test.ts | 2 +- tsconfig.json | 49 +++-- 174 files changed, 588 insertions(+), 486 deletions(-) create mode 100644 .github/workflows/atlaslibraries.yml diff --git a/.dockerignore b/.dockerignore index 4cb7988..71a91e7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,7 @@ # Keep the build context small — only package.json, bun.lock, src/, # migrations/, tsconfig.json and scripts/connect.ts are actually COPY'd into # the image. -# (atlas is fetched by `bun install` from github:wess/atlas.) +# versioned Atlas libraries are fetched by `bun install`. # VCS + local .git diff --git a/.github/workflows/atlaslibraries.yml b/.github/workflows/atlaslibraries.yml new file mode 100644 index 0000000..8818410 --- /dev/null +++ b/.github/workflows/atlaslibraries.yml @@ -0,0 +1,20 @@ +name: Atlas libraries +on: [push, pull_request] +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + defaults: + run: + working-directory: . + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 + with: + persist-credentials: false + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 + with: + bun-version: "1.4.4" + - run: bun install --frozen-lockfile --ignore-scripts + - run: bun run check:atlas + - run: bun run typecheck diff --git a/CLAUDE.md b/CLAUDE.md index f41cd36..4d13eaa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ Repository guidance for agent sessions. Bun is the runtime, package manager, and bundler — never use `node`/`npm`. - `bun install` — install deps -- `bun run dev` — start both API (`:3000`) and web (`:3001`) via `@atlas/cli` foreman (`src/dev.ts`) +- `bun run dev` — start both API (`:3000`) and web (`:3001`) via `@wess/atlas/cli` foreman (`src/dev.ts`) - `bun run api` — API only, with `--hot` - `bun run web` — web only, with `--hot` - `bun src/start.ts` — production entry: runs API + web together **without** `--hot` (the `Dockerfile`'s default `CMD`; `src/dev.ts` is the `--hot` equivalent) @@ -29,22 +29,22 @@ TypeScript + Bun server + React 19 (client) + Postgres + pluggable blob storage ### Monorepo shape -Root `package.json` depends on `atlas`, pinned to a release tag (`github:wess/atlas#v0.3.0`); the git package (`@wess/atlas`) vendors every `@atlas/` subpackage under `node_modules/atlas/web/packages/`. `@atlas/` imports in `src/` resolve through `tsconfig.json` `paths` entries — bun reads tsconfig at runtime. To bump atlas, change the tag in `package.json` and run `bun install`; if the release moved its packages (0.3.0 moved them under `web/`), repoint the `paths` too, or every import breaks at runtime. Atlas's per-package reference docs live at `node_modules/atlas/web/packages//AGENTS.md`; `node_modules/atlas/web/SOUL.md` and `node_modules/atlas/web/llms.txt` are the AI-session entry points (or read them on GitHub at wess/atlas). +Root `package.json` depends on `atlas`, pinned to a release tag (`versioned Atlas libraries from GitHub releases`); the git package (`@wess/atlas`) vendors every `@wess/atlas/` subpackage under `node_modules/atlas/web/packages/`. `@wess/atlas/` imports in `src/` resolve through `tsconfig.json` `paths` entries — bun reads tsconfig at runtime. To bump atlas, change the tag in `package.json` and run `bun install`; if the release moved its packages (0.3.0 moved them under `web/`), repoint the `paths` too, or every import breaks at runtime. Atlas's per-package reference docs live at `node_modules/atlas/web/packages//AGENTS.md`; `node_modules/atlas/web/SOUL.md` and `node_modules/atlas/web/llms.txt` are the AI-session entry points (or read them on GitHub at wess/atlas). ### Request pipeline `src/server.ts` is the composition root. It: -1. Builds a typed config via `@atlas/config`'s `defineConfig` + `env(...)` helpers -2. Opens a Postgres `Connection` via `@atlas/db#connect` +1. Builds a typed config via `@wess/atlas/config`'s `defineConfig` + `env(...)` helpers +2. Opens a Postgres `Connection` via `@wess/atlas/db#connect` 3. Builds a `StorageHandle` via `src/storage/index.ts#createStorage` — picks a driver from `STORAGE_DRIVER` (`s3` or `local`) 4. Builds an emailer via `src/email/index.ts#createEmailer` -5. Runs migrations from `./migrations` via `@atlas/migrate#migrate.up` -6. Registers routes from ~58 feature-module factories (~242 routes) into the `@atlas/server` router +5. Runs migrations from `./migrations` via `@wess/atlas/migrate#migrate.up` +6. Registers routes from ~58 feature-module factories (~242 routes) into the `@wess/atlas/server` router 7. Starts background sweeps on `setInterval`, then `Bun.serve` wrapped in `withSecurityHeaders` Boot order matters: `SECRET` is validated **before** the DB connection and migrations, so a misconfigured production boot exits without touching the schema. Don't move it back down. -`connect()` is passed an explicit `pool` (`DB_POOL`, default 20). `@atlas/db` defaults to 5, which is a throughput ceiling — every authenticated request costs 2-3 queries and all the sweeps share the pool. +`connect()` is passed an explicit `pool` (`DB_POOL`, default 20). `@wess/atlas/db` defaults to 5, which is a throughput ceiling — every authenticated request costs 2-3 queries and all the sweeps share the pool. **Every background sweep is registered in `src/server.ts`** and wrapped in `guardedSweep` (skips a tick if the previous run is still going, logs failures). Sweeps must not schedule themselves from inside a route factory — `sessionRoutes` and `shareRoutes` used to, which hid them from the composition root, skipped the overlap guard, and started timers in any test that merely built the route table. Boot sweeps are staggered 750ms apart so startup doesn't contend for the whole pool at once. @@ -58,7 +58,7 @@ Handler convention: - `pipeline(requireAuth({ secret, db }))` produces a guard; add `parseJson` or `parseMultipart` for bodies. `requireAuth` accepts `{ secret, db, scope?, noOAuth? }` and authenticates three credential types: session JWTs (checked against the `sessions` table via `jti`), PATs (`stohr_pat_…`, SHA-256 hashed in `apps`), and OAuth access tokens. Routes that mint further credentials pass `noOAuth: true`; scoped OAuth routes pass `scope`. - `authId(c)` reads `c.assigns.auth.id` — every module redefines this one-liner; `requireAuth` is what populates `c.assigns.auth`. - Routes return `json(c, status, body)`; binary downloads use `stream(c, 200, body)` with `putHeader` to set content-type / content-disposition / content-length -- DB queries use `@atlas/db`'s `from("table").where(q => q("col").equals(x))...` fluent builder; use `raw("NOW()")` when you need literal SQL +- DB queries use `@wess/atlas/db`'s `from("table").where(q => q("col").equals(x))...` fluent builder; use `raw("NOW()")` when you need literal SQL API query params and JSON bodies accept both `snake_case` and `camelCase` (e.g. `folder_id` / `folderId`, `parent_id` / `parentId`). When adding new params, keep this dual-form pattern. @@ -66,7 +66,7 @@ API query params and JSON bodies accept both `snake_case` and `camelCase` (e.g. ### Data model -Schema lives in two places: `src/schema/index.ts` (TS schema via `@atlas/db` `defineSchema`) **and** `migrations/_/up.sql` + `down.sql` (hand-written SQL). Migrations are the source of truth at runtime — the TS schema is not auto-synced. When changing the DB, update both, and add a new numbered migration directory (never edit an applied one). +Schema lives in two places: `src/schema/index.ts` (TS schema via `@wess/atlas/db` `defineSchema`) **and** `migrations/_/up.sql` + `down.sql` (hand-written SQL). Migrations are the source of truth at runtime — the TS schema is not auto-synced. When changing the DB, update both, and add a new numbered migration directory (never edit an applied one). ~40 tables across 55 migrations. The core blob model is `users` → `folders` (self-referential `parent_id` for nesting) → `files` → `file_versions`, plus `shares`. The rest back specific features: `collaborations`, `invites`, `apps` (PATs), `s3_access_keys`, `oauth_clients` / `oauth_authorization_codes` / `oauth_device_codes` / `oauth_refresh_tokens`, `sessions`, `webauthn_credentials` / `webauthn_challenges`, `password_resets`, `folder_actions` / `folder_action_runs` / `user_actions`, `rate_limits`, `audit_events`, `contact_messages`. `src/schema/index.ts` is the quickest way to see every column. @@ -79,7 +79,7 @@ File versioning: uploading a file with the same `name` into the same folder arch `src/storage/` is the only place blob backends are touched. Layout: - `src/storage/index.ts` — defines the `StorageDriver` interface (`put / get / drop`), the discriminated `StorageConfig`, and `createStorage(config)` dispatcher. Re-exports `put`, `fetchObject`, `drop`, `makeKey(userId, name)` for consumers — no consumer should ever import a driver directly. -- `src/storage/s3/index.ts` — S3-compatible driver (wraps `@atlas/storage`). +- `src/storage/s3/index.ts` — S3-compatible driver (wraps `@wess/atlas/storage`). - `src/storage/local/index.ts` — disk-backed driver (single host; uses `Bun.write` / `Bun.file` under `STORAGE_LOCAL_DIR`, with a path-traversal guard). - `src/storage/thumb.ts` — `sharp`-based image thumbnail helper invoked from the upload handler; thumbnails are stored as their own keys (`files.thumb_key`). diff --git a/Dockerfile b/Dockerfile index 5e6d581..879557a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ # so you only need to publish :3001. Migrations run automatically on API # startup. # -# BUILD — atlas is a normal bun dep (github:wess/atlas), pulled by +# BUILD — versioned Atlas libraries are pulled by # `bun install` inside the deps stage: # docker build -t stohr . # @@ -28,16 +28,13 @@ # ───────────────────────────────────────────────────────────────────────── # ---- deps: resolve + install into its own cached layer ------------------ -FROM oven/bun:1-alpine AS deps +FROM oven/bun:1.4.4-alpine AS deps WORKDIR /app -# atlas is fetched via `bun install` from github:wess/atlas — needs git in -# the image. Alpine's bun base lacks it. -RUN apk add --no-cache git COPY package.json bun.lock ./ -RUN bun install --frozen-lockfile --production +RUN bun install --frozen-lockfile --production --omit=peer # ---- runtime ------------------------------------------------------------ -FROM oven/bun:1-alpine AS runtime +FROM oven/bun:1.4.4-alpine AS runtime WORKDIR /app # poppler-utils provides pdftoppm (PDF thumbnails) and pdftotext (content diff --git a/biome.json b/biome.json index 92d58a8..945da02 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json", + "$schema": "https://biomejs.dev/schemas/2.6.2/schema.json", "assist": { "actions": { "source": { @@ -10,7 +10,7 @@ "linter": { "enabled": true, "rules": { - "recommended": true, + "preset": "recommended", "suspicious": { "noExplicitAny": "off", "noImplicitAnyLet": "warn", diff --git a/bun.lock b/bun.lock index 5f13713..fdcdc53 100644 --- a/bun.lock +++ b/bun.lock @@ -1,50 +1,62 @@ { - "lockfileVersion": 1, + "lockfileVersion": 2, "configVersion": 1, "workspaces": { "": { "name": "stohr", "dependencies": { - "@simplewebauthn/browser": "^13.3.0", - "@simplewebauthn/server": "^13.3.3", + "@simplewebauthn/browser": "^14.0.0", + "@simplewebauthn/server": "^14.0.3", "@types/qrcode": "^1.5.6", - "atlas": "github:wess/atlas#v0.3.2", + "@wess/atlas": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-0.4.9.tgz", + "@wess/atlas-auth": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-auth-0.4.9.tgz", + "@wess/atlas-cli": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-cli-0.4.9.tgz", + "@wess/atlas-config": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-config-0.4.9.tgz", + "@wess/atlas-db": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-db-0.4.9.tgz", + "@wess/atlas-migrate": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-migrate-0.4.9.tgz", + "@wess/atlas-server": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-server-0.4.9.tgz", + "@wess/atlas-sso": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-sso-0.4.9.tgz", + "@wess/atlas-storage": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-storage-0.4.9.tgz", "ldapts": "^9.2.0", - "lucide-react": "^1.50.0", + "lucide-react": "^1.61.0", "qrcode": "^1.5.4", - "react": "^19.3.0", - "react-dom": "^19.3.0", + "react": "^19.3.1", + "react-dom": "^19.3.1", "sharp": "^0.35.5", }, "devDependencies": { - "@biomejs/biome": "^2.5.15", - "@types/bun": "latest", - "@types/react": "latest", - "@types/react-dom": "latest", + "@biomejs/biome": "^2.6.2", + "@types/bun": "^1.4.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", }, "peerDependencies": { - "typescript": "^5.9.3", + "typescript": "^7.0.2", }, }, }, "packages": { - "@biomejs/biome": ["@biomejs/biome@2.5.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.5.15", "@biomejs/cli-darwin-x64": "2.5.15", "@biomejs/cli-linux-arm64": "2.5.15", "@biomejs/cli-linux-arm64-musl": "2.5.15", "@biomejs/cli-linux-x64": "2.5.15", "@biomejs/cli-linux-x64-musl": "2.5.15", "@biomejs/cli-win32-arm64": "2.5.15", "@biomejs/cli-win32-x64": "2.5.15" }, "bin": { "biome": "bin/biome" } }, "sha512-WZTW4slm/pdkh92K6t/3aEN++44JD1PQ7squ7RCMLI1flHGl43DVOIGXvCjHiZgBMO1V4uYxoFNtqrIA4qGuIQ=="], + "@biomejs/biome": ["@biomejs/biome@2.6.2", "", { "optionalDependencies": { "@biomejs/cli-android-arm64": "2.6.2", "@biomejs/cli-android-x64": "2.6.2", "@biomejs/cli-darwin-arm64": "2.6.2", "@biomejs/cli-darwin-x64": "2.6.2", "@biomejs/cli-linux-arm64": "2.6.2", "@biomejs/cli-linux-arm64-musl": "2.6.2", "@biomejs/cli-linux-x64": "2.6.2", "@biomejs/cli-linux-x64-musl": "2.6.2", "@biomejs/cli-win32-arm64": "2.6.2", "@biomejs/cli-win32-x64": "2.6.2" }, "bin": { "biome": "bin/biome" } }, "sha512-JLTFAFF9vfJcWwLhwuL4ZHflLg+XfTEC4IUnAlJRX1cMRt57++Xd1Ysb9Fdmlh9YUrvyCXfPEHjjEIqKJGdPKw=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.5.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BZVzFhJ/mUvTLMYbc9x6el0o2Uv5zP7bACYyhFb6fSc1giroXm7PL0a5KqMJ9F+/BnkYRjagD/ROSDVOZ6eapg=="], + "@biomejs/cli-android-arm64": ["@biomejs/cli-android-arm64@2.6.2", "", { "os": "android", "cpu": "arm64" }, "sha512-dMpdpH7zFEL5FxuIA9LJW+RoNyC3oeDB7PJyjqVVwtMNoKB5uo8OZYmrVSBikn71txzYwy/3xga7UME6bJQZ6A=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.5.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-V5Kw63V+fVGNFhFrizDxMbGXAzZCh8kYzJpy3GI6gTapWDg7bZK9oYC9CbVgQSEdTnupz0U5Efz8Ev+5vdBBXw=="], + "@biomejs/cli-android-x64": ["@biomejs/cli-android-x64@2.6.2", "", { "os": "android", "cpu": "x64" }, "sha512-XCwEhPBGYzuRA502dRkCcQ+5cefQwuxQR7f9wa4do92dvIcuBL6VMLMFB/fL9hlpZ4dGSfHdpGFSIDlp52mg0A=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.5.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-XaG7P7eeSLYETD3K9grfB0mQmpLQZjygdbsxekWBJAg4am79fGAtRpfRyNnTvXB2fZFNnJZG3nXm7HBat0+VUw=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.6.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rpXtabRgyZNz3aCjd/cRoSZGYi92R9eAXdUUe1sigIsRDyfMwgThaa98Yxt1fiZ7mxquqkAyIHIo08N/e1ToBA=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.5.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-tGzZUTcJCV7tj5Adh/Gn6nR4MycqA3iohq2LEcrarAgRBkU0h0OKd2UzCRkOsOYOuUGaUJb4YmqRqyy2feGGSw=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.6.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-7GGzlm1GxUKoQ9CNV8tQZ+XXad4sz+v+uzNsWlhaGjsnZqUOVBw1OmAMpG3uNV/Mr0UrCpRJvSK0qvfuqSQOjg=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.5.15", "", { "os": "linux", "cpu": "x64" }, "sha512-xE4iEW/3LqlYj9GFgGrFsFSH51dEEpUbYWBfeOv0q87WkUDxK2o/HhreSb7qMJqck70RVM6Lg96hgedcAYcOkA=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.6.2", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-Qs4CofCE8MdkjZFfEjswh2NAcbyQ7IVYtGSzQBvLqFlla/CSXroGbktUFndWG/kVSTywadauzAspYWtSfqAc2g=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.5.15", "", { "os": "linux", "cpu": "x64" }, "sha512-IlxUcyxilVGPsE008x13pWdkTbU3nQpP2i9b5UrbOYj6goBkKsRX1XB7yJLcV+O1H9LBchIIm4adOaVLZBX0ZQ=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.6.2", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-I+FYCLVSmR3cYfKcQ+KNeLOZ5w0wRd9fQFlw3JbSvy7bkegvTqdHaBRRcJzHQB/1ldldTLIcG21ka6X2cTWmJw=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.5.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-2kPKzhNlm8C+Ru3GcO0Me2ODkCBLrVOUNuyi84RJyWDVKAA4+Kjj3jMjL938lF6BRfvltC4vB2nPY9SvN51Ovg=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.6.2", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-FJKsb95418139xDdbv9XnNJsIIwvsgR21Of0aE9B9U+nQlOtRq5gJl2ps0jZUmYBxTaOlP9BKo8N+Ff8+Rui1g=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.5.15", "", { "os": "win32", "cpu": "x64" }, "sha512-yAzh4UqEImV6Hcy0zjUqNfJAsUhoD64FBQCdTG8Md/Z2wQeVP/ZmJ3XRYAs1g8J9fjTFyl2fCtc5FB5til47+g=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.6.2", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-wnjEXAK2pDd2j8r9gKI3L+44sIxjkYzS5aHmD1+K57RNJ3sFyT4n22NH6QFPqqeVdRBxN54H3kckUUCrFKCcJw=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.6.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-/PEOo6evlgrQOfKhMNtC/4Gk8ai3hySXXEtjUzCqZe/4iAbMdqelpp7qvZEDyLxlZS+BjOMQFpq2gXI/BPaAqw=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.6.2", "", { "os": "win32", "cpu": "x64" }, "sha512-FVlWD+mDDz8nN5LWKRWUhhb7wKIK0VE3oXQvQBX7Fwwj00CvqMVhMyiz1iz8O5aZGmnkhFlKSwJPrUvMh5prQw=="], "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], @@ -62,37 +74,37 @@ "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ=="], - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], - "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], - "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.5", "", { "dependencies": { "@emnapi/runtime": "^1.11.3" } }, "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ=="], @@ -106,39 +118,43 @@ "@levischuck/tiny-cbor": ["@levischuck/tiny-cbor@0.2.11", "", {}, "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow=="], - "@peculiar/asn1-android": ["@peculiar/asn1-android@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-iD3VskhVQnM4nE3PN9cBdPTR7JrqZy3FYk+uD2CeG6DUqKoANqaEfx0f7izPmW+Qm5JBM35ek+viLCmjy18ByQ=="], + "@peculiar/asn1-android": ["@peculiar/asn1-android@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-llW/qjavL+tOxt5i9whUv4wsbsLpUwI6k/DrvKsdA/H7A/TB/6CosMFgvei28fcJ8ncD0c5lig1oBBlo4KGMCw=="], + + "@peculiar/asn1-asym-key": ["@peculiar/asn1-asym-key@2.11.0", "", { "dependencies": { "@peculiar/asn1-pkcs8": "^2.11.0", "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-r2957WdSZle/Zt4t9og7OMQYXNJ9/3ANXVtFwLCDJuHORlBZ4AFmDt1Qee0CzyTbHQg4ZZApBGEz5/6cFsyCRg=="], - "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "@peculiar/asn1-x509-attr": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ=="], + "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "@peculiar/asn1-x509-attr": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-SlAiDoT/Cd8qaNmbTt78gqyaEvu2fQd6ML6KWJkdjXGrgDKnHHrusVkfQUelkfinL2p665IIADb0JBixtT8W1g=="], - "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA=="], + "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-M/ED0yJ05qMK+UADPKnIa8vhAeewOJALSxTAZB7RQ/batRHhIJZkwznCcWAbFO5saHJ1yEQ+m4lncEcG9RnQSg=="], - "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw=="], + "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q=="], - "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.7.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.7.0", "@peculiar/asn1-pkcs8": "^2.7.0", "@peculiar/asn1-rsa": "^2.7.0", "@peculiar/asn1-schema": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA=="], + "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.11.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.11.0", "@peculiar/asn1-pkcs8": "^2.11.0", "@peculiar/asn1-rsa": "^2.11.0", "@peculiar/asn1-schema": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-ykSAWRu8KkmzU8LRpk9ZQC3zuLmBEtoSMjIv9XHVamD5W7amqreV5wttKqnvtjWOzzSJQxA/HVT8/tHwpEEGSQ=="], - "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-9GTl1nE8Mx1kTZ+7QyYatDyKsm34QcWRBFkY1iPvWC3X4Dona5s/tlLiQsx5WzVdZqiMBZNYT0buyw4/vbhnjw=="], + "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-lragjkjQGnQ5luxC+sxoAfAO/jBiQ7hOEGlDKJUk7MC5zY3AzjB2DU0GyPUH1Sswdv10t7DurY0zylOYMLb88w=="], - "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.7.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.7.0", "@peculiar/asn1-pfx": "^2.7.0", "@peculiar/asn1-pkcs8": "^2.7.0", "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "@peculiar/asn1-x509-attr": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew=="], + "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.11.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.11.0", "@peculiar/asn1-pfx": "^2.11.0", "@peculiar/asn1-pkcs8": "^2.11.0", "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "@peculiar/asn1-x509-attr": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-gDdFjpqV0weJjgNUvueUVf4D8uVbpq+VbG0TsxLAY2QGljAkJyL9qwQ7avol9j0jaYSJ7Ey7v7RZp0M3GTcQSA=="], - "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ=="], + "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA=="], - "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.7.0", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg=="], + "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.11.0", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A=="], - "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g=="], + "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww=="], - "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.7.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/asn1-x509": "^2.7.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-NS8e7SOgXipkzUPLF/sce7ukpMpWjhxYsH0n6Y+bHYo4TTxOb95Zv7hqwSuL212mj5YxovjdOKQOgH1As3E94w=="], + "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.11.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-Fgvnd9REmLxEj/4cbDP54dNUNUXkzUksXLqEHqs1mHBuSRjSTCUSPM/WQIZYSvrdG7ND9CX1AQtPoIBekhgQSA=="], + + "@peculiar/asn1-x509-post-quantum": ["@peculiar/asn1-x509-post-quantum@2.11.0", "", { "dependencies": { "@peculiar/asn1-asym-key": "^2.11.0", "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-K6EnquTX3xJ2G+uLPFH0jVkh7W8y6eTzoCxvSoXAj0sWS5uvVB2PEvpBPdzY4+ytaedUM3x9ZVgX0AZKb316ew=="], "@peculiar/utils": ["@peculiar/utils@2.0.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ=="], - "@peculiar/x509": ["@peculiar/x509@1.14.3", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs9": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA=="], + "@peculiar/x509": ["@peculiar/x509@2.2.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.11.0", "@peculiar/asn1-csr": "^2.11.0", "@peculiar/asn1-ecc": "^2.11.0", "@peculiar/asn1-pkcs9": "^2.11.0", "@peculiar/asn1-rsa": "^2.11.0", "@peculiar/asn1-schema": "^2.11.0", "@peculiar/asn1-x509": "^2.11.0", "@peculiar/asn1-x509-post-quantum": "^2.11.0", "pvtsutils": "^1.3.6", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-adpW58ySPQMOUPv8pTKT3RIyCFqfUFt8X05ukPdtkQToXDVr8dMtxuenik1yx8tNFTbpApWsM/Hi5SzlIx48+Q=="], - "@simplewebauthn/browser": ["@simplewebauthn/browser@13.3.0", "", {}, "sha512-BE/UWv6FOToAdVk0EokzkqQQDOWtNydYlY6+OrmiZ5SCNmb41VehttboTetUM3T/fr6EAFYVXjz4My2wg230rQ=="], + "@simplewebauthn/browser": ["@simplewebauthn/browser@14.0.0", "", {}, "sha512-1odWVqeEBTl7lJ9zMKLEsmTlnyrDO5iRcTvfMKKk1WThUnp/i8JJdffdj2icP+tty159s4PgwE3BiMoEW9NFow=="], - "@simplewebauthn/server": ["@simplewebauthn/server@13.3.3", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.1", "@peculiar/asn1-rsa": "^2.6.1", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "@peculiar/x509": "^1.14.3" } }, "sha512-LelX/lcy5cjc15A86i/aNxHhB5eU7dd20QsbP0VLAf9e38+SLlsnqCCyecx3xqfGofhmX05h1J9fKRYWxw+luA=="], + "@simplewebauthn/server": ["@simplewebauthn/server@14.0.3", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.1", "@peculiar/asn1-rsa": "^2.6.1", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "@peculiar/asn1-x509-post-quantum": "^2.9.4", "@peculiar/x509": "^2.1.0", "reflect-metadata": "^0.2.2" } }, "sha512-D39/0fiDiYmGV+nraY9s63D1Ho2AX/waMLy22/9gUadTUuvbAnstfb4bpbHYbwZuV5ZLDYN1SmzDKuiHzKAA4Q=="], - "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], + "@types/bun": ["@types/bun@1.4.3", "", { "dependencies": { "bun-types": "1.4.3" } }, "sha512-N67Pqy8JXbAY/j0tNraS3V5mubGvc6rrrNDmDCtZLlFzccbUJPDb0tvgUBC5q4m8ybkP93Jcn1QB+RYQ6PvBhw=="], - "@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + "@types/node": ["@types/node@26.6.5", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg=="], "@types/qrcode": ["@types/qrcode@1.5.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw=="], @@ -146,15 +162,71 @@ "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], + "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="], + + "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="], + + "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="], + + "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="], + + "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="], + + "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="], + + "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="], + + "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="], + + "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="], + + "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="], + + "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="], + + "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="], + + "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="], + + "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="], + + "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="], + + "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="], + + "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="], + + "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="], + + "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="], + + "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], + + "@wess/atlas": ["@wess/atlas@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-0.4.9.tgz", { "peerDependencies": { "@wess/atlas-admin": "0.4.9", "@wess/atlas-ai": "0.4.9", "@wess/atlas-auth": "0.4.9", "@wess/atlas-billing": "0.4.9", "@wess/atlas-cache": "0.4.9", "@wess/atlas-cli": "0.4.9", "@wess/atlas-config": "0.4.9", "@wess/atlas-db": "0.4.9", "@wess/atlas-edge": "0.4.9", "@wess/atlas-email": "0.4.9", "@wess/atlas-mcp": "0.4.9", "@wess/atlas-migrate": "0.4.9", "@wess/atlas-oauth": "0.4.9", "@wess/atlas-request": "0.4.9", "@wess/atlas-security": "0.4.9", "@wess/atlas-server": "0.4.9", "@wess/atlas-share": "0.4.9", "@wess/atlas-social": "0.4.9", "@wess/atlas-sso": "0.4.9", "@wess/atlas-storage": "0.4.9", "@wess/atlas-ui": "0.4.9" }, "optionalPeers": ["@wess/atlas-admin", "@wess/atlas-ai", "@wess/atlas-auth", "@wess/atlas-billing", "@wess/atlas-cache", "@wess/atlas-cli", "@wess/atlas-config", "@wess/atlas-db", "@wess/atlas-edge", "@wess/atlas-email", "@wess/atlas-mcp", "@wess/atlas-migrate", "@wess/atlas-oauth", "@wess/atlas-request", "@wess/atlas-security", "@wess/atlas-server", "@wess/atlas-share", "@wess/atlas-social", "@wess/atlas-sso", "@wess/atlas-storage", "@wess/atlas-ui"] }, "sha512-inHyUypAxGa6U6xGfEf3Rtr5kRpKBME5/YL7yvPk3X0mic8S9NRlRhDHcBkvewkxI/p1MbJETPJkcpMoxQzBig=="], + + "@wess/atlas-auth": ["@wess/atlas-auth@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-auth-0.4.9.tgz", { "peerDependencies": { "@wess/atlas-db": "0.4.9", "@wess/atlas-server": "0.4.9" }, "optionalPeers": ["@wess/atlas-db", "@wess/atlas-server"] }, "sha512-QTnpgZbY7Ha02oa8aPv3H/mhjYEx2Yl8b7h1bPs2Wt4gy0OaLHPB+tZ1Z4OSGUsqswGCD7+mW/MOHjwvjtxtsg=="], + + "@wess/atlas-cli": ["@wess/atlas-cli@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-cli-0.4.9.tgz", { "bin": { "atlas": "./packages/cli/entry.ts" } }, "sha512-QX7XHz4zWOHJM3+7ptWI+eWV2GJY+JI8HCmkWMCGn/qVmPGp4Bvn0+evD9MjAZAWm1nM9PU3lEkKHnG32QofgQ=="], + + "@wess/atlas-config": ["@wess/atlas-config@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-config-0.4.9.tgz", {}, "sha512-MajkbpSIrDwQWNQZ5HjqcerNRYbakAybrgQlaOeBg8bNk4mryqb4j2kxeVr4WuIXUxsNFyh6k4bN44khNqxrYg=="], + + "@wess/atlas-db": ["@wess/atlas-db@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-db-0.4.9.tgz", {}, "sha512-Q+2TI2OABveLsNVc+1PtiEfdygply/UDAChntp/mMY6UI4I3v0Sc4i/tlf/iN95MTdvvMZLGoVLqkEK2ufMSOg=="], + + "@wess/atlas-migrate": ["@wess/atlas-migrate@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-migrate-0.4.9.tgz", { "peerDependencies": { "@wess/atlas-db": "0.4.9" }, "optionalPeers": ["@wess/atlas-db"] }, "sha512-ObMT4VaHHqp5JatrEoko1D8uEISvsGtBPuZqXTz98k0T+trdLPFyZujeirowpYOGAMjfruAgdRLy8EHlHtK7gw=="], + + "@wess/atlas-server": ["@wess/atlas-server@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-server-0.4.9.tgz", {}, "sha512-5EnrfmeLFxL2t/ZJzhdZnKtEf0CYjiztDeS6RQ/9zxVDTg/OpABMMi0eaHMJ4luUMarvzV0S0X14G1JGMye6KA=="], + + "@wess/atlas-sso": ["@wess/atlas-sso@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-sso-0.4.9.tgz", { "peerDependencies": { "@wess/atlas-auth": "0.4.9", "@wess/atlas-db": "0.4.9", "@wess/atlas-server": "0.4.9" }, "optionalPeers": ["@wess/atlas-auth", "@wess/atlas-db", "@wess/atlas-server"] }, "sha512-AJ0EcXWHRnW9TcnQ73K4t3t+IQM4UdKRSUmleN2NksmA+aAXqJr+rqAPBf0aOyMYPHiywYPB/6zkX1ocGxBkvw=="], + + "@wess/atlas-storage": ["@wess/atlas-storage@https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-storage-0.4.9.tgz", {}, "sha512-tK3EEJPrB5jP9BrWL22gac32Na7jShLCoZCsft4uEQWupp09a30oTKrDkZ6BXNODuLegMKurqqGby0fHq2Enzg=="], + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "asn1js": ["asn1js@3.0.10", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.5", "tslib": "^2.8.1" } }, "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg=="], + "asn1js": ["asn1js@3.1.0", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.2.0", "tslib": "^2.8.1" } }, "sha512-HWYi1THkOqguCiO+vwj09ZkQFD2kKEsejYHAYCtX0D80WVdoDnvRc9IukXX/jeb0T9NRWJnRtqwdbHltnFjwXA=="], - "atlas": ["@wess/atlas@github:wess/atlas#324ef28", { "dependencies": { "zod": "^4.6.5" }, "peerDependencies": { "@mantine/core": "^9.6.1", "@mantine/form": "^9.6.1", "@mantine/hooks": "^9.6.1", "@tanstack/react-table": "^9.2.4", "lucide-react": "^1.47.0", "react": "^19.3.0", "react-dom": "^19.3.0", "typescript": ">=5.9" }, "optionalPeers": ["@mantine/core", "@mantine/form", "@mantine/hooks", "@tanstack/react-table", "lucide-react", "react", "react-dom"] }, "wess-atlas-324ef28", "sha512-aWSS4Me4EmZkqBxjJATV4OjP7j+a+BtsGgsV6iPHEhC8GA3xuX9rYqTln4EFf4gAF3fSjFFIj+ttRaLFzt5AOQ=="], - - "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="], + "bun-types": ["bun-types@1.4.3", "", { "dependencies": { "@types/node": "*", "undici-types": "*" } }, "sha512-tinRJNGOmUN+tEAsn2y2e942n9JHRHR42iUYzDH75NmhJqVBokGSQkkfSFdNWwsANIdrK6ACH9t01M452YyTwg=="], "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], @@ -184,7 +256,7 @@ "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "lucide-react": ["lucide-react@1.50.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-RqHPQtKX6S9IE1xOL4oTHHsVQbcwJWTnmlxI6AdI9IpOwKiy7q+COPCQyMepI/Qu1x3h7sunpyEMvqtgFbgNiQ=="], + "lucide-react": ["lucide-react@1.61.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-v2SQPPPNjnr+BlhL9Spuzmo5yR+hLkftfuE4E3jaxdNPgSH0hJKPcLJBP7yAta87jQNPsSERS59PJjCJ/CorBA=="], "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], @@ -198,13 +270,13 @@ "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], - "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="], + "pvutils": ["pvutils@1.2.0", "", {}, "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg=="], "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], - "react": ["react@19.3.0", "", {}, "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog=="], + "react": ["react@19.3.1", "", {}, "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw=="], - "react-dom": ["react-dom@19.3.0", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.0" } }, "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q=="], + "react-dom": ["react-dom@19.3.1", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.1" } }, "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ=="], "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], @@ -230,9 +302,9 @@ "tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], - "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], "which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="], @@ -244,8 +316,6 @@ "yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], - "zod": ["zod@4.6.5", "", {}, "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q=="], - "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], } } diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index b29a6ce..8c10dc7 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -14,7 +14,7 @@ A high-level walk-through of what's running and how it fits together. └────────┬───────┘ │ /api/* ┌────────▼───────┐ - │ api :3000 │ Bun + @atlas/server (router), all routes + │ api :3000 │ Bun + @wess/atlas/server (router), all routes └────┬───────┬───┘ │ │ ┌────────▼───┐ ┌▼────────────┐ @@ -33,7 +33,7 @@ src/ server.ts — composition root, Bun.serve + atlas router start.ts — production entry: runs the API + web together (the Docker image's CMD) dev.ts — local dev entry: API + web with --hot - schema/index.ts — TypeScript schema mirror for @atlas/db + schema/index.ts — TypeScript schema mirror for @wess/atlas/db auth/ index.ts — signup / login / MFA challenge guard.ts — requireAuth pipeline guard (JWT, PAT, OAuth + scope derivation) @@ -103,7 +103,7 @@ src/ limitbody/index.ts — bounded request bodies, preserves peer/team metadata … — paging, token, username, and other shared helpers web/ — single-file React SPA + serve.ts proxy -migrations/ — hand-written SQL, applied at API startup via @atlas/migrate +migrations/ — hand-written SQL, applied at API startup via @wess/atlas/migrate scripts/deploy/ — DigitalOcean provisioning automation sdks/ — official client libraries (TS, Dart, Swift, Kotlin) apps/ — native clients (desktop menu-bar, mobile) @@ -112,7 +112,7 @@ docs/ — what you're reading ## Request pipeline -`@atlas/server` uses **pipes** — small composable functions over a `Conn`. A typical handler: +`@wess/atlas/server` uses **pipes** — small composable functions over a `Conn`. A typical handler: ```ts const guard = pipeline(requireAuth({ secret, db })) @@ -164,7 +164,7 @@ Audit events (`audit_events` table) are emitted from auth, MFA, sessions, passwo `src/storage/index.ts` defines a small `StorageDriver` interface (`put / get / drop`) and a `createStorage(config)` dispatcher. Two drivers ship today: -- **`s3`** — wraps `@atlas/storage`; works against AWS S3, DigitalOcean Spaces, Cloudflare R2, MinIO, RustFS, Backblaze B2, or anything else that speaks SigV4. +- **`s3`** — wraps `@wess/atlas/storage`; works against AWS S3, DigitalOcean Spaces, Cloudflare R2, MinIO, RustFS, Backblaze B2, or anything else that speaks SigV4. - **`local`** — writes blobs to disk under `STORAGE_LOCAL_DIR` using `Bun.write` / `Bun.file`. Single-host only; share the directory across replicas (NFS / EFS) if you need to. `STORAGE_DRIVER` env picks one at startup. Adding a new backend is one new file in `src/storage//index.ts` and a case in the dispatcher — every consumer keeps calling the same `put` / `fetchObject` / `drop` re-exports. diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index c87b2d1..29b7db6 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -104,7 +104,7 @@ WebDAV has no env var on new deploys — it's an owner toggle (`webdav_enabled`) | var | default | purpose | | --- | --- | --- | -| `MAX_UPLOAD_BYTES` | `1073741824` (1 GiB) | Hard cap on a single request body. Bun buffers the body in memory; with `STORAGE_DRIVER=s3` the `@atlas/storage` driver re-buffers it to compute the SigV4 payload hash, so this is effectively a per-upload memory ceiling. The `local` driver streams to disk after Bun's initial buffer | +| `MAX_UPLOAD_BYTES` | `1073741824` (1 GiB) | Hard cap on a single request body. Bun buffers the body in memory; with `STORAGE_DRIVER=s3` the `@wess/atlas/storage` driver re-buffers it to compute the SigV4 payload hash, so this is effectively a per-upload memory ceiling. The `local` driver streams to disk after Bun's initial buffer | | `TRUSTED_PROXIES` | (empty; `127.0.0.1` in the Docker image) | Comma-separated IPv4 addresses or CIDRs allowed to set `X-Forwarded-For` / `X-Real-IP` / `X-Forwarded-Host`. The chain is walked from the right past trusted hops to the first untrusted address, so list every proxy between the client and the API (the single-container image's web process is `127.0.0.1`; add your edge too). With Docker Compose set this to `172.16.0.0/12` (covers the bridge). Leave empty for direct-to-API traffic. Untrusted XFF is ignored; the socket peer is used instead. The same rule decides whether `X-Forwarded-Host` (which the web proxy always sets to the browser's `Host`) is believed when picking the team, and whether a peer may call `/internal/tls/allow` | | `WEBHOOKS_ALLOW_PRIVATE` | (empty) | Webhook URLs are resolved and refused when they land on loopback, RFC1918, link-local (cloud metadata), CGNAT or ULA addresses, both at registration and at every delivery; redirects are never followed. Set to `true` on a homelab deployment whose hooks legitimately target LAN services. `http://` is always accepted for webhooks | @@ -166,7 +166,7 @@ If `RESEND_API_KEY` is empty, Stohr boots fine — emails are written to the API ## Database -Stohr migrates on startup via `@atlas/migrate`. The migrations directory is hand-written SQL with `up.sql` / `down.sql` per change set: +Stohr migrates on startup via `@wess/atlas/migrate`. The migrations directory is hand-written SQL with `up.sql` / `down.sql` per change set: ``` migrations/00000001_create_users/up.sql diff --git a/package.json b/package.json index c27b808..e7dc87e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stohr", - "version": "0.10.6", + "version": "0.10.7", "type": "module", "private": true, "scripts": { @@ -16,27 +16,39 @@ "format:fix": "biome format --write src/ scripts/", "check:fix": "biome check --write src/ scripts/", "tidy": "bun run format:fix && bun run lint:fix", - "connect": "bun scripts/connect.ts" + "connect": "bun scripts/connect.ts", + "check:atlas": "bunx --package https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-cli-0.4.9.tgz atlas check" }, "devDependencies": { - "@biomejs/biome": "^2.5.15", - "@types/bun": "latest", - "@types/react": "latest", - "@types/react-dom": "latest" + "@biomejs/biome": "^2.6.2", + "@types/bun": "^1.4.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0" }, "dependencies": { - "@simplewebauthn/browser": "^13.3.0", - "@simplewebauthn/server": "^13.3.3", + "@simplewebauthn/browser": "^14.0.0", + "@simplewebauthn/server": "^14.0.3", "@types/qrcode": "^1.5.6", - "atlas": "github:wess/atlas#v0.3.2", "ldapts": "^9.2.0", - "lucide-react": "^1.50.0", + "lucide-react": "^1.61.0", "qrcode": "^1.5.4", - "react": "^19.3.0", - "react-dom": "^19.3.0", - "sharp": "^0.35.5" + "react": "^19.3.1", + "react-dom": "^19.3.1", + "sharp": "^0.35.5", + "@wess/atlas": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-0.4.9.tgz", + "@wess/atlas-auth": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-auth-0.4.9.tgz", + "@wess/atlas-cli": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-cli-0.4.9.tgz", + "@wess/atlas-config": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-config-0.4.9.tgz", + "@wess/atlas-db": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-db-0.4.9.tgz", + "@wess/atlas-migrate": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-migrate-0.4.9.tgz", + "@wess/atlas-server": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-server-0.4.9.tgz", + "@wess/atlas-sso": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-sso-0.4.9.tgz", + "@wess/atlas-storage": "https://github.com/wess/atlas/releases/download/v0.4.9/wess-atlas-storage-0.4.9.tgz" }, "peerDependencies": { - "typescript": "^5.9.3" + "typescript": "^7.0.2" + }, + "engines": { + "bun": ">=1.4.4" } } diff --git a/scripts/connect.ts b/scripts/connect.ts index 2b5798e..40e3937 100644 --- a/scripts/connect.ts +++ b/scripts/connect.ts @@ -15,7 +15,8 @@ * It is not encrypted. It carries a secret key and should be treated like one: * shown once, pasted, and not committed. */ -import { connect, from } from "@atlas/db" +import { connect } from "@wess/atlas/db/postgres" +import { from } from "@wess/atlas/db/query" import { generateAccessKey, generateSecretKey } from "../src/s3keys/generate.ts" import { normalizeUsername } from "../src/util/username.ts" diff --git a/scripts/team.ts b/scripts/team.ts index 1b1b594..63b66f5 100644 --- a/scripts/team.ts +++ b/scripts/team.ts @@ -20,7 +20,8 @@ * The API caches slug lookups for 30s (misses included), so a change made * here can take that long to show on the team's host. */ -import { connect, from, raw } from "@atlas/db" +import { connect } from "@wess/atlas/db/postgres" +import { from, raw } from "@wess/atlas/db/query" import type { Emailer } from "../src/email/index.ts" import { createEmailer } from "../src/email/index.ts" import { computeTeamUsage, countTeamUsers } from "../src/teams/members.ts" diff --git a/src/actions/dispatch.ts b/src/actions/dispatch.ts index 1f8287b..370f0d4 100644 --- a/src/actions/dispatch.ts +++ b/src/actions/dispatch.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import type { FileRow, FolderRow } from "../permissions/index.ts" import type { StorageHandle } from "../storage/index.ts" import { getAction } from "./registry.ts" diff --git a/src/actions/index.ts b/src/actions/index.ts index 53734e3..ba82815 100644 --- a/src/actions/index.ts +++ b/src/actions/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { folderAccess, isOwner } from "../permissions/index.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/actions/primitives/route/copy.ts b/src/actions/primitives/route/copy.ts index a5fd1a7..311f7c2 100644 --- a/src/actions/primitives/route/copy.ts +++ b/src/actions/primitives/route/copy.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import { fetchObject, makeKey, put } from "../../../storage/index.ts" import { checkActionQuota, finishActionWrite } from "../../quota.ts" import type { Primitive } from "../types.ts" diff --git a/src/actions/primitives/route/move.ts b/src/actions/primitives/route/move.ts index 11e855a..c563f48 100644 --- a/src/actions/primitives/route/move.ts +++ b/src/actions/primitives/route/move.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import type { Primitive } from "../types.ts" import { resolveTemplateChain } from "../util/folders.ts" import { expandTemplate } from "../util/template.ts" diff --git a/src/actions/primitives/route/rename.ts b/src/actions/primitives/route/rename.ts index 75291a6..741eb1b 100644 --- a/src/actions/primitives/route/rename.ts +++ b/src/actions/primitives/route/rename.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import type { Primitive } from "../types.ts" import { expandTemplate } from "../util/template.ts" diff --git a/src/actions/primitives/transform/compress.ts b/src/actions/primitives/transform/compress.ts index f96f294..d035119 100644 --- a/src/actions/primitives/transform/compress.ts +++ b/src/actions/primitives/transform/compress.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import sharp from "sharp" import { clamdConfig } from "../../../scanning/index.ts" import { drop, fetchObject, makeKey, put } from "../../../storage/index.ts" diff --git a/src/actions/primitives/transform/resize.ts b/src/actions/primitives/transform/resize.ts index 128e2e8..90b4ae2 100644 --- a/src/actions/primitives/transform/resize.ts +++ b/src/actions/primitives/transform/resize.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import sharp from "sharp" import { clamdConfig } from "../../../scanning/index.ts" import { drop, fetchObject, makeKey, put } from "../../../storage/index.ts" diff --git a/src/actions/primitives/transform/thumbnail.ts b/src/actions/primitives/transform/thumbnail.ts index 4218c17..f3022f6 100644 --- a/src/actions/primitives/transform/thumbnail.ts +++ b/src/actions/primitives/transform/thumbnail.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import sharp from "sharp" import { drop, fetchObject, makeKey, put } from "../../../storage/index.ts" import { checkActionQuota, finishActionWrite } from "../../quota.ts" diff --git a/src/actions/primitives/types.ts b/src/actions/primitives/types.ts index de238eb..b2dd8c0 100644 --- a/src/actions/primitives/types.ts +++ b/src/actions/primitives/types.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import type { FileRow, FolderRow } from "../../permissions/index.ts" import type { StorageHandle } from "../../storage/index.ts" diff --git a/src/actions/primitives/util/folders.ts b/src/actions/primitives/util/folders.ts index a4fb067..972d5c4 100644 --- a/src/actions/primitives/util/folders.ts +++ b/src/actions/primitives/util/folders.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" export const findOrCreateFolder = async ( db: Connection, diff --git a/src/actions/quota.ts b/src/actions/quota.ts index ef92dda..6efe9e4 100644 --- a/src/actions/quota.ts +++ b/src/actions/quota.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import type { FileRow } from "../permissions/index.ts" import { drop, type StorageHandle } from "../storage/index.ts" import { quotaAfterWrite, quotaMessage } from "../uploads/quota.ts" diff --git a/src/actions/stohr/organize.ts b/src/actions/stohr/organize.ts index 20888b8..431d882 100644 --- a/src/actions/stohr/organize.ts +++ b/src/actions/stohr/organize.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import { findOrCreateFolder } from "../primitives/util/folders.ts" import type { Action } from "../types.ts" diff --git a/src/actions/stohr/resize.ts b/src/actions/stohr/resize.ts index f2c0ace..1feaebd 100644 --- a/src/actions/stohr/resize.ts +++ b/src/actions/stohr/resize.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import sharp from "sharp" import { clamdConfig } from "../../scanning/index.ts" import { drop, fetchObject, makeKey, put } from "../../storage/index.ts" diff --git a/src/actions/types.ts b/src/actions/types.ts index bcc13d2..e69c9bf 100644 --- a/src/actions/types.ts +++ b/src/actions/types.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import type { FileRow, FolderRow } from "../permissions/index.ts" import type { StorageHandle } from "../storage/index.ts" diff --git a/src/actions/user/execute.ts b/src/actions/user/execute.ts index eda9c43..214c0cd 100644 --- a/src/actions/user/execute.ts +++ b/src/actions/user/execute.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { getPrimitive } from "../primitives/registry.ts" import type { StepEnvelope } from "../primitives/types.ts" import type { ActionContext, ActionResult } from "../types.ts" diff --git a/src/actions/user/index.ts b/src/actions/user/index.ts index d3d47fa..6265ce5 100644 --- a/src/actions/user/index.ts +++ b/src/actions/user/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../../auth/guard.ts" import { parseJson } from "../../util/json/index.ts" import { describePrimitive, listPrimitives } from "../primitives/registry.ts" diff --git a/src/activity/index.ts b/src/activity/index.ts index 85da668..f402d5b 100644 --- a/src/activity/index.ts +++ b/src/activity/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { fileAccess, folderAccess } from "../permissions/index.ts" diff --git a/src/admin/index.ts b/src/admin/index.ts index 4df930b..b094b06 100644 --- a/src/admin/index.ts +++ b/src/admin/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { purgeUser } from "../auth/deletion.ts" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" diff --git a/src/admin/users.ts b/src/admin/users.ts index b90f00a..b562f57 100644 --- a/src/admin/users.ts +++ b/src/admin/users.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { issuePasswordReset, passwordResetUrl } from "../auth/password.ts" import type { Emailer } from "../email/index.ts" diff --git a/src/ai/routes.ts b/src/ai/routes.ts index 2dd07a1..9bb6ccb 100644 --- a/src/ai/routes.ts +++ b/src/ai/routes.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, pipeline, post, put } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, pipeline, post, put } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { ownerOnly } from "../security/owner.ts" import { rootOnly } from "../teams/guards.ts" diff --git a/src/apps/index.ts b/src/apps/index.ts index ee6600d..1464ee9 100644 --- a/src/apps/index.ts +++ b/src/apps/index.ts @@ -1,7 +1,7 @@ import { randomBytes } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { APP_TOKEN_PREFIX, hashToken, requireAuth } from "../auth/guard.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/auth/deletion.ts b/src/auth/deletion.ts index d994563..8a67de0 100644 --- a/src/auth/deletion.ts +++ b/src/auth/deletion.ts @@ -1,7 +1,7 @@ import { randomBytes } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { json, pipeline, post } from "@wess/atlas/server" import type { Emailer } from "../email/index.ts" import { accountDeletionEmail } from "../email/templates/deletion.ts" import { logEvent } from "../security/audit.ts" diff --git a/src/auth/external.ts b/src/auth/external.ts index 40adb78..cba1926 100644 --- a/src/auth/external.ts +++ b/src/auth/external.ts @@ -1,6 +1,6 @@ -import { hash } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import { hash } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { ROOT_TEAM_ID } from "../teams/resolve.ts" import { randomToken } from "../util/token.ts" import { isValidUsername, normalizeUsername } from "../util/username.ts" diff --git a/src/auth/guard.ts b/src/auth/guard.ts index b2f0b75..0d22c08 100644 --- a/src/auth/guard.ts +++ b/src/auth/guard.ts @@ -1,9 +1,9 @@ import { createHash } from "node:crypto" -import { token } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import type { Conn, PipeFn } from "@atlas/server" -import { assign, halt } from "@atlas/server" +import * as token from "@wess/atlas/auth/token" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import type { Conn, PipeFn } from "@wess/atlas/server" +import { assign, halt } from "@wess/atlas/server" import { parseScope, type Scope } from "../oauth/helpers.ts" import { isSessionActive, touchSession } from "../security/sessions.ts" import { teamFor } from "../teams/request.ts" diff --git a/src/auth/index.ts b/src/auth/index.ts index a53f80e..22db580 100644 --- a/src/auth/index.ts +++ b/src/auth/index.ts @@ -1,8 +1,9 @@ import { randomUUID } from "node:crypto" -import { hash, token, verify } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, pipeline, post } from "@atlas/server" +import { hash, verify } from "@wess/atlas/auth/password" +import * as token from "@wess/atlas/auth/token" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, pipeline, post } from "@wess/atlas/server" import { sendSystem } from "../messages/system.ts" import { logEvent } from "../security/audit.ts" import { checkRate, clientIp, userAgent } from "../security/ratelimit.ts" diff --git a/src/auth/ldap/admin.ts b/src/auth/ldap/admin.ts index 7ff8268..81111be 100644 --- a/src/auth/ldap/admin.ts +++ b/src/auth/ldap/admin.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline, post, put } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline, post, put } from "@wess/atlas/server" import { ownerOnly } from "../../security/owner.ts" import { parseJson } from "../../util/json/index.ts" import { requireAuth } from "../guard.ts" diff --git a/src/auth/ldap/config.ts b/src/auth/ldap/config.ts index c7eef58..44be333 100644 --- a/src/auth/ldap/config.ts +++ b/src/auth/ldap/config.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" export type LdapConfig = { enabled: boolean diff --git a/src/auth/ldap/index.ts b/src/auth/ldap/index.ts index 5c4de73..cf82b06 100644 --- a/src/auth/ldap/index.ts +++ b/src/auth/ldap/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline, post } from "@wess/atlas/server" import { logEvent } from "../../security/audit.ts" import { checkRate, clientIp, userAgent } from "../../security/ratelimit.ts" import { issueSession } from "../../security/sessions.ts" diff --git a/src/auth/mfa.ts b/src/auth/mfa.ts index b70e0a8..586a886 100644 --- a/src/auth/mfa.ts +++ b/src/auth/mfa.ts @@ -1,7 +1,7 @@ -import { hash, verify } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, pipeline, post } from "@atlas/server" +import { hash, verify } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, pipeline, post } from "@wess/atlas/server" import { logEvent } from "../security/audit.ts" import { checkRate, clientIp, userAgent } from "../security/ratelimit.ts" import { revokeAllSessions } from "../security/sessions.ts" diff --git a/src/auth/oidc/admin.ts b/src/auth/oidc/admin.ts index 366696a..64e816b 100644 --- a/src/auth/oidc/admin.ts +++ b/src/auth/oidc/admin.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline, put } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline, put } from "@wess/atlas/server" import { ownerOnly } from "../../security/owner.ts" import { parseJson } from "../../util/json/index.ts" import { requireAuth } from "../guard.ts" diff --git a/src/auth/oidc/config.ts b/src/auth/oidc/config.ts index ad10d5f..c5df7ab 100644 --- a/src/auth/oidc/config.ts +++ b/src/auth/oidc/config.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" export type OidcConfig = { enabled: boolean diff --git a/src/auth/oidc/index.ts b/src/auth/oidc/index.ts index 6c97f5b..fc56418 100644 --- a/src/auth/oidc/index.ts +++ b/src/auth/oidc/index.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { get, halt, json, pipeline, putHeader } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { get, halt, json, pipeline, putHeader } from "@wess/atlas/server" import { logEvent } from "../../security/audit.ts" import { clientIp, userAgent } from "../../security/ratelimit.ts" import { issueSession } from "../../security/sessions.ts" diff --git a/src/auth/passkeys.ts b/src/auth/passkeys.ts index a521252..07f7bbb 100644 --- a/src/auth/passkeys.ts +++ b/src/auth/passkeys.ts @@ -1,13 +1,13 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" -import type { AuthenticatorTransportFuture } from "@simplewebauthn/server" +import type { AuthenticatorTransport } from "@simplewebauthn/server" import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthenticationResponse, verifyRegistrationResponse, } from "@simplewebauthn/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { logEvent } from "../security/audit.ts" import { checkRate, clientIp, userAgent } from "../security/ratelimit.ts" import { issueSession, revokeAllSessions } from "../security/sessions.ts" @@ -59,10 +59,10 @@ const b64ToBytes = (s: string) => new Uint8Array(Buffer.from(s, "base64url")).sl const bytesToB64 = (b: Uint8Array): string => Buffer.from(b).toString("base64url") const userIdToHandle = (userId: number) => new Uint8Array(Buffer.from(`stohr-user-${userId}`)).slice() -const parseTransports = (raw: string): AuthenticatorTransportFuture[] => { +const parseTransports = (raw: string): AuthenticatorTransport[] => { try { const v = JSON.parse(raw || "[]") - return Array.isArray(v) ? (v as AuthenticatorTransportFuture[]) : [] + return Array.isArray(v) ? (v as AuthenticatorTransport[]) : [] } catch { return [] } @@ -214,7 +214,7 @@ export const passkeyRoutes = (db: Connection, secret: string, rp: RpConfig) => { const info = verification.registrationInfo const transports = Array.isArray(response?.response?.transports) - ? (response.response.transports as AuthenticatorTransportFuture[]) + ? (response.response.transports as AuthenticatorTransport[]) : [] const credId = info.credential.id const publicKeyB64 = bytesToB64(info.credential.publicKey) diff --git a/src/auth/password.ts b/src/auth/password.ts index fd815cc..47346ad 100644 --- a/src/auth/password.ts +++ b/src/auth/password.ts @@ -1,8 +1,8 @@ import { randomBytes } from "node:crypto" -import { hash } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { json, pipeline, post } from "@atlas/server" +import { hash } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { json, pipeline, post } from "@wess/atlas/server" import type { Emailer } from "../email/index.ts" import { passwordResetEmail } from "../email/templates/password.ts" import { logEvent } from "../security/audit.ts" diff --git a/src/auth/sessions.ts b/src/auth/sessions.ts index f6a41d2..8912a85 100644 --- a/src/auth/sessions.ts +++ b/src/auth/sessions.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { logEvent } from "../security/audit.ts" import { clientIp, userAgent } from "../security/ratelimit.ts" import { revokeAllSessions, revokeSession } from "../security/sessions.ts" diff --git a/src/auth/social/index.ts b/src/auth/social/index.ts index 7416fd0..db56d84 100644 --- a/src/auth/social/index.ts +++ b/src/auth/social/index.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { get, halt, json, pipeline, putHeader } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { get, halt, json, pipeline, putHeader } from "@wess/atlas/server" import { logEvent } from "../../security/audit.ts" import { clientIp, userAgent } from "../../security/ratelimit.ts" import { issueSession } from "../../security/sessions.ts" diff --git a/src/auth/state.ts b/src/auth/state.ts index 9128e9c..09caca3 100644 --- a/src/auth/state.ts +++ b/src/auth/state.ts @@ -1,5 +1,5 @@ -import type { Conn } from "@atlas/server" -import { putHeader } from "@atlas/server" +import type { Conn } from "@wess/atlas/server" +import { putHeader } from "@wess/atlas/server" import { requestBaseUrl } from "../teams/request.ts" import { randomToken } from "../util/token.ts" diff --git a/src/castle/guard.ts b/src/castle/guard.ts index a614712..065531d 100644 --- a/src/castle/guard.ts +++ b/src/castle/guard.ts @@ -1,5 +1,5 @@ -import type { PipeFn } from "@atlas/server" -import { halt } from "@atlas/server" +import type { PipeFn } from "@wess/atlas/server" +import { halt } from "@wess/atlas/server" const constantTimeEquals = (a: string, b: string): boolean => { if (a.length !== b.length) return false diff --git a/src/castle/index.ts b/src/castle/index.ts index 4846c33..da679e9 100644 --- a/src/castle/index.ts +++ b/src/castle/index.ts @@ -7,9 +7,9 @@ // the root host only and every lookup stays inside the root team, so a // tenant user with a matching email is never touched. -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { resolvePendingCollabs } from "../auth/index.ts" import { logEvent } from "../security/audit.ts" import { clientIp, userAgent } from "../security/ratelimit.ts" diff --git a/src/collabs/index.ts b/src/collabs/index.ts index 2d38f9a..b835ebd 100644 --- a/src/collabs/index.ts +++ b/src/collabs/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import type { Emailer } from "../email/index.ts" import { inviteEmail } from "../email/templates/invite.ts" diff --git a/src/comments/index.ts b/src/comments/index.ts index ad57185..5e5282e 100644 --- a/src/comments/index.ts +++ b/src/comments/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { emitMany } from "../notifications/emit.ts" import { canWrite, fileAccess, folderAccess, type Role } from "../permissions/index.ts" diff --git a/src/contact/index.ts b/src/contact/index.ts index b0297ac..bf27d52 100644 --- a/src/contact/index.ts +++ b/src/contact/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { ownerOnly } from "../security/owner.ts" import { checkRate, clientIp, userAgent } from "../security/ratelimit.ts" diff --git a/src/dev.ts b/src/dev.ts index 91a1203..c1b3ad9 100644 --- a/src/dev.ts +++ b/src/dev.ts @@ -1,4 +1,4 @@ -import { foreman } from "@atlas/cli" +import { foreman } from "@wess/atlas/cli" await foreman({ api: "bun --hot src/server.ts", diff --git a/src/federation/files.ts b/src/federation/files.ts index dd2118f..a35ec8d 100644 --- a/src/federation/files.ts +++ b/src/federation/files.ts @@ -1,7 +1,7 @@ import { randomUUID } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, parseMultipart, pipeline, post, putHeader, stream } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, parseMultipart, pipeline, post, putHeader, stream } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { requireSettingEnabled, SETTING_FEDERATION_ENABLED } from "../settings/index.ts" import type { StorageHandle } from "../storage/index.ts" diff --git a/src/federation/folders.ts b/src/federation/folders.ts index b11d88e..afb3e3f 100644 --- a/src/federation/folders.ts +++ b/src/federation/folders.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { folderAccess } from "../permissions/index.ts" import { requireSettingEnabled, SETTING_FEDERATION_ENABLED } from "../settings/index.ts" diff --git a/src/federation/index.ts b/src/federation/index.ts index 343416b..c44ef30 100644 --- a/src/federation/index.ts +++ b/src/federation/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" import { requireSettingEnabled, SETTING_FEDERATION_ENABLED } from "../settings/index.ts" diff --git a/src/federation/invites.ts b/src/federation/invites.ts index 6d782c1..56e0777 100644 --- a/src/federation/invites.ts +++ b/src/federation/invites.ts @@ -1,6 +1,6 @@ import { createHash } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { pubPemToRaw, randomToken, signEd25519, verifyEd25519Raw } from "./keys.ts" // Invite tokens are signed JWS-like payloads. The wire format is diff --git a/src/federation/keys.ts b/src/federation/keys.ts index fcffe86..e4dd010 100644 --- a/src/federation/keys.ts +++ b/src/federation/keys.ts @@ -8,8 +8,8 @@ import { generateKeyPairSync, randomBytes, } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" // Two keypairs live per instance: Ed25519 signs peer-to-peer requests and // invite tokens; X25519 is used for ECDH so the introducer can encrypt the diff --git a/src/federation/membership.ts b/src/federation/membership.ts index 1aca94c..330b16d 100644 --- a/src/federation/membership.ts +++ b/src/federation/membership.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { getInstanceKeys, pubPemToRaw } from "./keys.ts" export type FederationRow = { diff --git a/src/federation/pairing.ts b/src/federation/pairing.ts index 4b19735..27b7699 100644 --- a/src/federation/pairing.ts +++ b/src/federation/pairing.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { json, pipeline, post } from "@wess/atlas/server" import { requireSettingEnabled, SETTING_FEDERATION_ENABLED } from "../settings/index.ts" import { rootOnlyRoutes } from "../teams/guards.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/federation/placement.ts b/src/federation/placement.ts index 8f715fd..02b77ea 100644 --- a/src/federation/placement.ts +++ b/src/federation/placement.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { getInstanceKeys } from "./keys.ts" import type { MemberRow } from "./membership.ts" diff --git a/src/federation/transport.ts b/src/federation/transport.ts index faf2f8d..3f96a1f 100644 --- a/src/federation/transport.ts +++ b/src/federation/transport.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { halt } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { halt } from "@wess/atlas/server" import { safeFetch } from "../util/safeurl/index.ts" import { sha256Hex } from "./crypto.ts" import { getInstanceKeys, rawEd25519ToPem, signEd25519, verifyEd25519 } from "./keys.ts" diff --git a/src/files/index.ts b/src/files/index.ts index 1dafc20..f7e3043 100644 --- a/src/files/index.ts +++ b/src/files/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, parseMultipart, patch, pipeline, post, putHeader, stream } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, parseMultipart, patch, pipeline, post, putHeader, stream } from "@wess/atlas/server" import type { RunSummary } from "../actions/dispatch.ts" import { fireEvent } from "../actions/dispatch.ts" import { requireAuth } from "../auth/guard.ts" diff --git a/src/folders/index.ts b/src/folders/index.ts index 67a521d..99bea82 100644 --- a/src/folders/index.ts +++ b/src/folders/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post, putHeader } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post, putHeader } from "@wess/atlas/server" import type { RunSummary } from "../actions/dispatch.ts" import { fireEvent } from "../actions/dispatch.ts" import { requireAuth } from "../auth/guard.ts" diff --git a/src/invites/index.ts b/src/invites/index.ts index 3d9908f..e606ffb 100644 --- a/src/invites/index.ts +++ b/src/invites/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { teamFor } from "../teams/request.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/mcp/index.ts b/src/mcp/index.ts index 9dce7df..ba4aea3 100644 --- a/src/mcp/index.ts +++ b/src/mcp/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline, post } from "@wess/atlas/server" import type { TeamClaims } from "../auth/guard.ts" import { requireAuth } from "../auth/guard.ts" import { parseScope, type Scope } from "../oauth/helpers.ts" diff --git a/src/mcp/servers.ts b/src/mcp/servers.ts index 31e96ab..b61c0e3 100644 --- a/src/mcp/servers.ts +++ b/src/mcp/servers.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { ownerOnly } from "../security/owner.ts" import { rootOnly } from "../teams/guards.ts" diff --git a/src/mcp/tools/index.ts b/src/mcp/tools/index.ts index 3dfd850..74539c1 100644 --- a/src/mcp/tools/index.ts +++ b/src/mcp/tools/index.ts @@ -3,7 +3,7 @@ // (mcp_tool_read, mcp_tool_write, mcp_tool_delete, mcp_tool_share) at call // time, so flipping a toggle in admin takes effect without restart. -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import type { StorageHandle } from "../../storage/index.ts" import { readTools } from "./read.ts" import { shareTools } from "./share.ts" diff --git a/src/mcp/tools/read.ts b/src/mcp/tools/read.ts index 38e4095..579367d 100644 --- a/src/mcp/tools/read.ts +++ b/src/mcp/tools/read.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import { fileAccess, folderAccess, visibleFileSql, visibleFolderSql } from "../../permissions/index.ts" import { isScanBlocked } from "../../scanning/index.ts" import { escapeLike } from "../../search/parse.ts" diff --git a/src/mcp/tools/share.ts b/src/mcp/tools/share.ts index c8665f2..73de85b 100644 --- a/src/mcp/tools/share.ts +++ b/src/mcp/tools/share.ts @@ -1,5 +1,5 @@ -import { hash } from "@atlas/auth" -import { from, raw } from "@atlas/db" +import { hash } from "@wess/atlas/auth/password" +import { from, raw } from "@wess/atlas/db/query" import { fileAccess, isOwner } from "../../permissions/index.ts" import { asError, asText, type Tool, type ToolContext } from "./index.ts" diff --git a/src/mcp/tools/trash.ts b/src/mcp/tools/trash.ts index 77f9da3..253ba7c 100644 --- a/src/mcp/tools/trash.ts +++ b/src/mcp/tools/trash.ts @@ -1,4 +1,4 @@ -import { from, raw } from "@atlas/db" +import { from, raw } from "@wess/atlas/db/query" import { canWrite, fileAccess, folderAccess, trashedFileAccess, trashedFolderAccess } from "../../permissions/index.ts" import { asError, asText, type Tool, type ToolContext } from "./index.ts" diff --git a/src/mcp/tools/write.ts b/src/mcp/tools/write.ts index 46474f1..fec99d5 100644 --- a/src/mcp/tools/write.ts +++ b/src/mcp/tools/write.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query" import { canWrite, fileAccess, folderAccess } from "../../permissions/index.ts" import { clamdConfig } from "../../scanning/index.ts" import { drop, makeKey, put } from "../../storage/index.ts" diff --git a/src/messages/index.ts b/src/messages/index.ts index 430e0d4..8e2b6ad 100644 --- a/src/messages/index.ts +++ b/src/messages/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { emit } from "../notifications/emit.ts" import { teamFor } from "../teams/request.ts" diff --git a/src/messages/system.ts b/src/messages/system.ts index a322fe1..482dc5b 100644 --- a/src/messages/system.ts +++ b/src/messages/system.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { emit } from "../notifications/emit.ts" // Send a system message to a user. Used for welcome notes, account diff --git a/src/notifications/emit.ts b/src/notifications/emit.ts index a5ad1cd..43bb76e 100644 --- a/src/notifications/emit.ts +++ b/src/notifications/emit.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { warn } from "../observability/logger.ts" export type NotificationKind = diff --git a/src/notifications/index.ts b/src/notifications/index.ts index 287f178..7484662 100644 --- a/src/notifications/index.ts +++ b/src/notifications/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/oauth/authorize.ts b/src/oauth/authorize.ts index 4e4dd07..4b8dcab 100644 --- a/src/oauth/authorize.ts +++ b/src/oauth/authorize.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" import { clientIp, userAgent } from "../security/ratelimit.ts" diff --git a/src/oauth/clients.ts b/src/oauth/clients.ts index b3539e7..54e7946 100644 --- a/src/oauth/clients.ts +++ b/src/oauth/clients.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" import { ownerOnly } from "../security/owner.ts" diff --git a/src/oauth/device.ts b/src/oauth/device.ts index fa26317..0ab82c4 100644 --- a/src/oauth/device.ts +++ b/src/oauth/device.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, parseForm, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, parseForm, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" import { clientIp, userAgent } from "../security/ratelimit.ts" diff --git a/src/oauth/discovery.ts b/src/oauth/discovery.ts index 3d13c19..4385483 100644 --- a/src/oauth/discovery.ts +++ b/src/oauth/discovery.ts @@ -1,4 +1,4 @@ -import { get, json } from "@atlas/server" +import { get, json } from "@wess/atlas/server" import { requestBaseUrl } from "../teams/request.ts" import { SUPPORTED_SCOPES } from "./helpers.ts" diff --git a/src/oauth/token.ts b/src/oauth/token.ts index 4317b86..355d011 100644 --- a/src/oauth/token.ts +++ b/src/oauth/token.ts @@ -1,8 +1,8 @@ import { timingSafeEqual } from "node:crypto" -import { token as jwt } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { json, parseForm, pipeline, post } from "@atlas/server" +import * as jwt from "@wess/atlas/auth/token" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { json, parseForm, pipeline, post } from "@wess/atlas/server" import { logEvent } from "../security/audit.ts" import { clientIp, userAgent } from "../security/ratelimit.ts" import { teamFor } from "../teams/request.ts" diff --git a/src/observability/health.ts b/src/observability/health.ts index 6c1213f..1572830 100644 --- a/src/observability/health.ts +++ b/src/observability/health.ts @@ -9,8 +9,8 @@ // needs: Postgres (SELECT 1) and the blob backend (probe). // 200 {status:"ready",checks:{…}} when all pass, else 503. -import type { Connection } from "@atlas/db" -import { get, json } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json } from "@wess/atlas/server" import type { StorageHandle } from "../storage/index.ts" const checkDb = async (db: Connection): Promise => { diff --git a/src/observability/metrics.ts b/src/observability/metrics.ts index dc00428..155e050 100644 --- a/src/observability/metrics.ts +++ b/src/observability/metrics.ts @@ -12,7 +12,7 @@ // withMetrics(handler) wraps the router fetch: it times each request and records // the method + final status into the counter and latency histogram. -import { get, putHeader, text } from "@atlas/server" +import { get, putHeader, text } from "@wess/atlas/server" // http_requests_total — keyed by "method status" so each label combo is its // own counter line. diff --git a/src/permissions/index.ts b/src/permissions/index.ts index 86b75af..4e51be7 100644 --- a/src/permissions/index.ts +++ b/src/permissions/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" export type Role = "owner" | "editor" | "viewer" diff --git a/src/photos/index.ts b/src/photos/index.ts index 88b3fb1..52affe4 100644 --- a/src/photos/index.ts +++ b/src/photos/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { get, json, parseMultipart, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { get, json, parseMultipart, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { clamdConfig } from "../scanning/index.ts" import type { StorageHandle } from "../storage/index.ts" diff --git a/src/public/index.ts b/src/public/index.ts index bbb7134..22f72f7 100644 --- a/src/public/index.ts +++ b/src/public/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { get, json, putHeader, stream } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { get, json, putHeader, stream } from "@wess/atlas/server" import { isScanBlocked } from "../scanning/index.ts" import { decideInline } from "../security/inline.ts" import type { StorageHandle } from "../storage/index.ts" diff --git a/src/s3/index.ts b/src/s3/index.ts index f996c2a..1d17e37 100644 --- a/src/s3/index.ts +++ b/src/s3/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, head, put, putHeader, setStatus, stream, text } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, head, put, putHeader, setStatus, stream, text } from "@wess/atlas/server" import { fireEvent } from "../actions/dispatch.ts" import type { FileRow, FolderRow } from "../permissions/index.ts" import { personalFileSql } from "../permissions/index.ts" diff --git a/src/s3keys/index.ts b/src/s3keys/index.ts index 1c4dc18..56741ed 100644 --- a/src/s3keys/index.ts +++ b/src/s3keys/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { parseJson } from "../util/json/index.ts" import { generateAccessKey, generateSecretKey } from "./generate.ts" diff --git a/src/scanning/index.ts b/src/scanning/index.ts index fc13163..6469bbe 100644 --- a/src/scanning/index.ts +++ b/src/scanning/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { fetchObject, type StorageHandle } from "../storage/index.ts" import { scanBytes } from "./clamd.ts" diff --git a/src/schema/index.ts b/src/schema/index.ts index 2331942..8373532 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -1,4 +1,4 @@ -import { column, defineSchema } from "@atlas/db" +import { column, defineSchema } from "@wess/atlas/db/query" // A team is a hard tenant boundary reached on its own subdomain. Team 1 is // the root team: the owner's own team and the control plane for the rest. diff --git a/src/search/content/indexer.ts b/src/search/content/indexer.ts index 4ec93f2..fca063d 100644 --- a/src/search/content/indexer.ts +++ b/src/search/content/indexer.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { clamdConfig } from "../../scanning/index.ts" import { fetchObject, type StorageHandle } from "../../storage/index.ts" import { extractText, MAX_TEXT_BYTES } from "./extract.ts" diff --git a/src/search/content/routes.ts b/src/search/content/routes.ts index 5a0347b..0f829b7 100644 --- a/src/search/content/routes.ts +++ b/src/search/content/routes.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { get, json, pipeline } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json, pipeline } from "@wess/atlas/server" import { requireAuth } from "../../auth/guard.ts" import { clamdConfig } from "../../scanning/index.ts" import { ownerOnly } from "../../security/owner.ts" diff --git a/src/search/index.ts b/src/search/index.ts index b62e8e4..b9118e2 100644 --- a/src/search/index.ts +++ b/src/search/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { get, json, pipeline } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { get, json, pipeline } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { visibleFileSql, visibleFolderSql } from "../permissions/index.ts" import { escapeLike, mimePatternsFor, parseQuery } from "./parse.ts" diff --git a/src/security/audit.ts b/src/security/audit.ts index 320d7e4..4585b34 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" export type AuditEvent = { userId?: number | null diff --git a/src/security/credentials.ts b/src/security/credentials.ts index 6b72428..3656921 100644 --- a/src/security/credentials.ts +++ b/src/security/credentials.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" // call under the user's row lock in the credential-change transaction export const revokeCredentials = async (db: Connection, userId: number): Promise => { diff --git a/src/security/owner.ts b/src/security/owner.ts index 742484c..fa5e53d 100644 --- a/src/security/owner.ts +++ b/src/security/owner.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { halt } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { halt } from "@wess/atlas/server" import { ROOT_TEAM_ID } from "../teams/resolve.ts" /** diff --git a/src/security/ratelimit.ts b/src/security/ratelimit.ts index bb1be5c..8368353 100644 --- a/src/security/ratelimit.ts +++ b/src/security/ratelimit.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import { forwardedClientIp, isTrustedProxy, normalizeIp } from "./proxies.ts" export type RateLimitResult = { diff --git a/src/security/sessions.ts b/src/security/sessions.ts index 411305d..ff59361 100644 --- a/src/security/sessions.ts +++ b/src/security/sessions.ts @@ -1,7 +1,7 @@ import { randomUUID } from "node:crypto" -import { token } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import * as token from "@wess/atlas/auth/token" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" const SESSION_TTL_SECONDS = 86400 * 7 diff --git a/src/security/totpclaims.ts b/src/security/totpclaims.ts index 13cb13f..d7f9560 100644 --- a/src/security/totpclaims.ts +++ b/src/security/totpclaims.ts @@ -1,4 +1,4 @@ -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import { verifyTotpStep } from "./totp.ts" export const claimTotp = async (db: Connection, userId: number, secret: string, code: string): Promise => { diff --git a/src/server.ts b/src/server.ts index e75ffed..23641f8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,7 +1,7 @@ -import { defineConfig, env } from "@atlas/config" -import { connect } from "@atlas/db" -import { migrate } from "@atlas/migrate" -import { router } from "@atlas/server" +import { defineConfig, env } from "@wess/atlas/config" +import { connect } from "@wess/atlas/db/postgres" +import { migrate } from "@wess/atlas/migrate" +import { router } from "@wess/atlas/server" import { actionRoutes } from "./actions/index.ts" import { userActionRoutes } from "./actions/user/index.ts" import { activityRoutes } from "./activity/index.ts" @@ -133,8 +133,8 @@ const config = defineConfig({ rpId: env("RP_ID", { default: "" }), rpName: env("RP_NAME", { default: "Stohr" }), rpOrigin: env("RP_ORIGIN", { default: "http://localhost:3001" }), - // @atlas/storage buffers the upload body in API memory to compute the - // AWS SigV4 payload hash, so size this cap for concurrent uploads. + // storage hashes incrementally; one-shot streams spool to private temporary + // files, so keep this cap deliberate for concurrent disk use. // streaming through the API must retain permission and quota checks. maxUploadBytes: env("MAX_UPLOAD_BYTES", { parse: Number, default: String(1024 * 1024 * 1024) }), // Opt-in M2M token for Castle (single-node homelab control plane). When diff --git a/src/settings/index.ts b/src/settings/index.ts index 55b8467..0ed22cd 100644 --- a/src/settings/index.ts +++ b/src/settings/index.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { get, halt, json, patch, pipeline } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { get, halt, json, patch, pipeline } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { ownerOnly } from "../security/owner.ts" import { rootOnly } from "../teams/guards.ts" diff --git a/src/shares/index.ts b/src/shares/index.ts index 3594d35..843eec2 100644 --- a/src/shares/index.ts +++ b/src/shares/index.ts @@ -1,7 +1,7 @@ -import { hash, verify } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { createConn, del, get, json, pipeline, post, putHeader, stream } from "@atlas/server" +import { hash, verify } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { createConn, del, get, json, pipeline, post, putHeader, stream } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { fileAccess, isOwner } from "../permissions/index.ts" import { isScanBlocked } from "../scanning/index.ts" diff --git a/src/spaces/index.ts b/src/spaces/index.ts index e71e390..754175d 100644 --- a/src/spaces/index.ts +++ b/src/spaces/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { teamFor } from "../teams/request.ts" import { parseJson } from "../util/json/index.ts" diff --git a/src/sso/index.ts b/src/sso/index.ts index 427f944..b3d600a 100644 --- a/src/sso/index.ts +++ b/src/sso/index.ts @@ -3,12 +3,12 @@ // by sub (so admins renaming their own Castle account remap cleanly). import { createHash } from "node:crypto" -import { token } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { get, halt, json } from "@atlas/server" -import { ensureSsoStateTable, type IdTokenClaims, mountSso, type SsoConfig } from "@atlas/sso" +import * as token from "@wess/atlas/auth/token" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { get, halt, json } from "@wess/atlas/server" +import { ensureSsoStateTable, type IdTokenClaims, mountSso, type SsoConfig } from "@wess/atlas/sso" import { upsertFromExternal } from "../auth/external.ts" import { fetchDiscovery } from "../auth/oidc/discovery.ts" import { bindLoginState, clearLoginState, loginStateNonce } from "../auth/state.ts" diff --git a/src/start.ts b/src/start.ts index 976b76d..581802d 100644 --- a/src/start.ts +++ b/src/start.ts @@ -1,4 +1,4 @@ -import { foreman } from "@atlas/cli" +import { foreman } from "@wess/atlas/cli" // Production entry point — runs the API and the SPA-serving web proxy as a // single process group. `src/dev.ts` is the `--hot` equivalent for local diff --git a/src/storage/s3/index.ts b/src/storage/s3/index.ts index 2d2d585..2e316ca 100644 --- a/src/storage/s3/index.ts +++ b/src/storage/s3/index.ts @@ -1,4 +1,4 @@ -import { createStore, download, presign, remove, upload } from "@atlas/storage" +import { createStore, download, presign, remove, upload } from "@wess/atlas/storage" import type { StorageDriver } from "../index.ts" export type S3Config = { diff --git a/src/teams/admin.ts b/src/teams/admin.ts index 7a7fc90..78750cb 100644 --- a/src/teams/admin.ts +++ b/src/teams/admin.ts @@ -2,10 +2,10 @@ // also creates its first admin and hands back the one-time link that sets // their password on the team's own subdomain. -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { purgeUser } from "../auth/deletion.ts" import { requireAuth } from "../auth/guard.ts" import type { Emailer } from "../email/index.ts" diff --git a/src/teams/domains.ts b/src/teams/domains.ts index 9358ed2..23a1d49 100644 --- a/src/teams/domains.ts +++ b/src/teams/domains.ts @@ -1,8 +1,8 @@ import { Resolver } from "node:dns/promises" import { isIP } from "node:net" -import type { Connection } from "@atlas/db" -import type { Route } from "@atlas/server" -import { del, get, json, pipeline, post, put } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import type { Route } from "@wess/atlas/server" +import { del, get, json, pipeline, post, put } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { logEvent } from "../security/audit.ts" import { checkRate } from "../security/ratelimit.ts" diff --git a/src/teams/guards.ts b/src/teams/guards.ts index c9bb2f8..4da368d 100644 --- a/src/teams/guards.ts +++ b/src/teams/guards.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn, Route } from "@atlas/server" -import { halt } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn, Route } from "@wess/atlas/server" +import { halt } from "@wess/atlas/server" import { teamFor } from "./request.ts" import { ROOT_TEAM_ID } from "./resolve.ts" diff --git a/src/teams/members.ts b/src/teams/members.ts index 595426c..e990547 100644 --- a/src/teams/members.ts +++ b/src/teams/members.ts @@ -2,8 +2,8 @@ // user (search, collaborators, messages, admin lists) must stay inside the // caller's team, and these are the checks to do it with. -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { ROOT_TEAM_ID } from "./resolve.ts" export const teamIdOf = async (db: Connection, userId: number): Promise => { diff --git a/src/teams/request.ts b/src/teams/request.ts index ecba4e5..493ecdb 100644 --- a/src/teams/request.ts +++ b/src/teams/request.ts @@ -4,7 +4,7 @@ // reads it back from inside pipes and handlers. import { isIP } from "node:net" -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import type { Cidr } from "../security/proxies.ts" import { effectiveHost } from "./host.ts" import type { Team } from "./resolve.ts" diff --git a/src/teams/resolve.ts b/src/teams/resolve.ts index f1f5a5c..45c66bb 100644 --- a/src/teams/resolve.ts +++ b/src/teams/resolve.ts @@ -3,8 +3,8 @@ // certificate probe from Caddy) must not turn into a query per hit. Team // writes clear the cache; the ttl bounds staleness across api replicas. -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { isReservedSlug } from "./slug.ts" export const ROOT_TEAM_ID = 1 diff --git a/src/teams/routes.ts b/src/teams/routes.ts index 63f283a..51658a6 100644 --- a/src/teams/routes.ts +++ b/src/teams/routes.ts @@ -2,10 +2,10 @@ // equivalents with the team pinned by the request host rather than chosen // by the caller. -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import type { Conn } from "@atlas/server" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import type { Conn } from "@wess/atlas/server" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { identityConflict, identityRate, TEAM_SCOPE, userAdminHandlers } from "../admin/users.ts" import { purgeUser } from "../auth/deletion.ts" import { requireAuth } from "../auth/guard.ts" diff --git a/src/teams/tls.ts b/src/teams/tls.ts index 73524e8..5b90a1f 100644 --- a/src/teams/tls.ts +++ b/src/teams/tls.ts @@ -5,8 +5,8 @@ // front door refuses /api/internal/* outright, so the public hostname never // reaches this route at all. -import type { Connection } from "@atlas/db" -import { get, json } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { get, json } from "@wess/atlas/server" import type { Cidr } from "../security/proxies.ts" import { checkRate } from "../security/ratelimit.ts" import { isLoopbackPeer, isTrustedPeer, socketPeer } from "./host.ts" diff --git a/src/teams/users.ts b/src/teams/users.ts index 7968a49..2e60462 100644 --- a/src/teams/users.ts +++ b/src/teams/users.ts @@ -3,9 +3,9 @@ // random unguessable one and a one-time set-password link (the password // reset machinery) on the team's own host. -import { hash } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import { hash } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { uniqueUsername } from "../auth/external.ts" import { issuePasswordReset, passwordResetUrl } from "../auth/password.ts" import type { Emailer } from "../email/index.ts" diff --git a/src/trash/index.ts b/src/trash/index.ts index 7f76e5e..0d0588b 100644 --- a/src/trash/index.ts +++ b/src/trash/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { personalFileSql } from "../permissions/index.ts" import type { StorageHandle } from "../storage/index.ts" diff --git a/src/uploads/finalize.ts b/src/uploads/finalize.ts index 4c78a8c..d01639e 100644 --- a/src/uploads/finalize.ts +++ b/src/uploads/finalize.ts @@ -3,8 +3,8 @@ // POST /files handler runs after put() — see src/files/index.ts. The shared // helpers there (archiveCurrent, the version branch) are not exported, so the // minimal equivalent is reproduced here. -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { clamdConfig } from "../scanning/index.ts" import type { StorageHandle } from "../storage/index.ts" import { drop, put } from "../storage/index.ts" diff --git a/src/uploads/index.ts b/src/uploads/index.ts index 0f3f49a..5a6c1df 100644 --- a/src/uploads/index.ts +++ b/src/uploads/index.ts @@ -7,9 +7,9 @@ // finalize concatenates them into the final key and drops the parts. import { randomBytes } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import type { FolderRow } from "../permissions/index.ts" import { canWrite, folderAccess } from "../permissions/index.ts" diff --git a/src/uploads/quota.ts b/src/uploads/quota.ts index a3bd8d6..c8c539c 100644 --- a/src/uploads/quota.ts +++ b/src/uploads/quota.ts @@ -3,7 +3,7 @@ // can both pass it. This is the second read, for both caps; the caller undoes // its own write when it comes back non-null. -import type { Connection } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" import type { QuotaDenied } from "../usage/index.ts" import { computeUsage, teamOverQuota } from "../usage/index.ts" diff --git a/src/uploads/s3.ts b/src/uploads/s3.ts index 59bd10a..fe91429 100644 --- a/src/uploads/s3.ts +++ b/src/uploads/s3.ts @@ -7,7 +7,7 @@ // put/get/drop, so it can't drive multipart. We rebuild the S3 store config // from the same env vars src/server.ts reads to construct the driver, then // sign raw requests against it. -import { signRequest } from "atlas/packages/storage/signing/index.ts" +import { signRequest } from "@wess/atlas/storage/signing" export type S3Store = { endpoint: string diff --git a/src/usage/index.ts b/src/usage/index.ts index b1ad38f..975a53b 100644 --- a/src/usage/index.ts +++ b/src/usage/index.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { computeTeamUsage, type TeamUsage } from "../teams/members.ts" export type UsageBreakdown = { diff --git a/src/users/index.ts b/src/users/index.ts index 75a895b..d7b640a 100644 --- a/src/users/index.ts +++ b/src/users/index.ts @@ -1,7 +1,7 @@ -import { hash, verify } from "@atlas/auth" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import { hash, verify } from "@wess/atlas/auth/password" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { scheduleDeletion } from "../auth/deletion.ts" import { requireAuth } from "../auth/guard.ts" import type { Emailer } from "../email/index.ts" diff --git a/src/util/json/index.ts b/src/util/json/index.ts index 0a61273..44a300b 100644 --- a/src/util/json/index.ts +++ b/src/util/json/index.ts @@ -1,5 +1,5 @@ -import type { PipeFn } from "@atlas/server" -import { halt, parseJson as parse } from "@atlas/server" +import type { PipeFn } from "@wess/atlas/server" +import { halt, parseJson as parse } from "@wess/atlas/server" import { limitBody } from "../limitbody/index.ts" const cap = limitBody() diff --git a/src/util/limitbody/index.ts b/src/util/limitbody/index.ts index 4a7281f..7b5567f 100644 --- a/src/util/limitbody/index.ts +++ b/src/util/limitbody/index.ts @@ -1,5 +1,5 @@ -import type { Conn, PipeFn } from "@atlas/server" -import { halt } from "@atlas/server" +import type { Conn, PipeFn } from "@wess/atlas/server" +import { halt } from "@wess/atlas/server" // caps a request body before parseJson/parseForm buffer it. content-length // is checked first so an honest oversize request is refused without reading diff --git a/src/webdav/auth.ts b/src/webdav/auth.ts index cda2e12..2895d5d 100644 --- a/src/webdav/auth.ts +++ b/src/webdav/auth.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from, raw } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from, raw } from "@wess/atlas/db/query" import { APP_TOKEN_PREFIX, hashToken } from "../auth/guard.ts" // WebDAV clients (macOS Finder, Windows File Explorer, RFC-compliant diff --git a/src/webdav/index.ts b/src/webdav/index.ts index 4f25176..3785830 100644 --- a/src/webdav/index.ts +++ b/src/webdav/index.ts @@ -1,7 +1,7 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import type { Conn, PipeFn, Route } from "@atlas/server" -import { halt, pipeline, putHeader, setStatus, stream, text } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import type { Conn, PipeFn, Route } from "@wess/atlas/server" +import { halt, pipeline, putHeader, setStatus, stream, text } from "@wess/atlas/server" import { dropFederationBlob, fetchFederationBytes, isFederationKey } from "../federation/files.ts" import { clamdConfig, isScanBlocked } from "../scanning/index.ts" import { requireSettingEnabledBasic, SETTING_WEBDAV_ENABLED, webdavEnabled } from "../settings/index.ts" diff --git a/src/webdav/paths.ts b/src/webdav/paths.ts index e4cbf84..34ea8a0 100644 --- a/src/webdav/paths.ts +++ b/src/webdav/paths.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" // WebDAV requests come in as URL paths like /webdav/photos/2024/IMG_1234.jpg. // We resolve this to a tree-walked folder ID + optional file row by diff --git a/src/webdav/settings.ts b/src/webdav/settings.ts index e8306aa..9bc3162 100644 --- a/src/webdav/settings.ts +++ b/src/webdav/settings.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { requireSettingEnabled, SETTING_WEBDAV_ENABLED } from "../settings/index.ts" diff --git a/src/webhooks/dispatch.ts b/src/webhooks/dispatch.ts index ab89d5c..64f3946 100644 --- a/src/webhooks/dispatch.ts +++ b/src/webhooks/dispatch.ts @@ -1,6 +1,6 @@ import { createHmac } from "node:crypto" -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" import { checkUrl, type SafeUrlOpts, safeFetch, type UrlCheck } from "../util/safeurl/index.ts" // Outbound webhook delivery. Fire-and-forget: we do not block the diff --git a/src/webhooks/index.ts b/src/webhooks/index.ts index d4b973b..b9c916d 100644 --- a/src/webhooks/index.ts +++ b/src/webhooks/index.ts @@ -1,6 +1,6 @@ -import type { Connection } from "@atlas/db" -import { from } from "@atlas/db" -import { del, get, json, patch, pipeline, post } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query" +import { from } from "@wess/atlas/db/query" +import { del, get, json, patch, pipeline, post } from "@wess/atlas/server" import { requireAuth } from "../auth/guard.ts" import { parseJson } from "../util/json/index.ts" import { checkWebhookUrl, WEBHOOK_EVENTS } from "./dispatch.ts" diff --git a/tests/account_deletion.test.ts b/tests/account_deletion.test.ts index 4bb77a2..612990f 100644 --- a/tests/account_deletion.test.ts +++ b/tests/account_deletion.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson, fakeStore, fakeEmailer, resetSentEmails, sentEmails, TEST_APP_URL } from "./helpers/http.ts" import { sweepDeletedAccounts } from "../src/auth/deletion.ts" diff --git a/tests/auth.test.ts b/tests/auth.test.ts index 3537973..a2405c4 100644 --- a/tests/auth.test.ts +++ b/tests/auth.test.ts @@ -1,9 +1,9 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { generateBackupCodes, generateSecret, totpAt } from "../src/security/totp.ts" -import { hash } from "@atlas/auth" +import { hash } from "@wess/atlas/auth/password"; let app: ReturnType diff --git a/tests/authboundaries.test.ts b/tests/authboundaries.test.ts index e84d258..9ae708e 100644 --- a/tests/authboundaries.test.ts +++ b/tests/authboundaries.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, test } from "bun:test" import { createHash, randomBytes } from "node:crypto" -import { hash } from "@atlas/auth" -import { from, raw } from "@atlas/db" +import { hash } from "@wess/atlas/auth/password"; +import { from, raw } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { issuePasswordReset } from "../src/auth/password.ts" diff --git a/tests/content_search.test.ts b/tests/content_search.test.ts index 05f831a..13d4e21 100644 --- a/tests/content_search.test.ts +++ b/tests/content_search.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from, raw } from "@atlas/db" +import { from, raw } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { extractText } from "../src/search/content/extract.ts" diff --git a/tests/discoverability.test.ts b/tests/discoverability.test.ts index 3edd7cd..3a06f23 100644 --- a/tests/discoverability.test.ts +++ b/tests/discoverability.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { sha256Hex } from "../src/util/token.ts" diff --git a/tests/external_auth.test.ts b/tests/external_auth.test.ts index a20cd32..6f82ec5 100644 --- a/tests/external_auth.test.ts +++ b/tests/external_auth.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { uniqueUsername, upsertFromExternal } from "../src/auth/external.ts" diff --git a/tests/federation_accept.test.ts b/tests/federation_accept.test.ts index 8e2919c..91969ba 100644 --- a/tests/federation_accept.test.ts +++ b/tests/federation_accept.test.ts @@ -1,6 +1,6 @@ import { randomUUID } from "node:crypto" import { afterEach, beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { router } from "@atlas/server" +import { router } from "@wess/atlas/server" import { authRoutes } from "../src/auth/index.ts" import { sha256Hex } from "../src/federation/crypto.ts" import { federationFilesRoutes } from "../src/federation/files.ts" diff --git a/tests/federationsecurity.test.ts b/tests/federationsecurity.test.ts index 1b63a47..f182f88 100644 --- a/tests/federationsecurity.test.ts +++ b/tests/federationsecurity.test.ts @@ -1,6 +1,6 @@ import { randomUUID } from "node:crypto" -import { from } from "@atlas/db" -import { router } from "@atlas/server" +import { from } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { beforeEach, expect, test } from "bun:test" import { authRoutes } from "../src/auth/index.ts" import { federationFilesRoutes } from "../src/federation/files.ts" diff --git a/tests/fileboundaries.test.ts b/tests/fileboundaries.test.ts index 4d9007b..51ff781 100644 --- a/tests/fileboundaries.test.ts +++ b/tests/fileboundaries.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { callMultipart } from "./helpers/multipart.ts" diff --git a/tests/filescan.test.ts b/tests/filescan.test.ts index 274cc1c..985cd7f 100644 --- a/tests/filescan.test.ts +++ b/tests/filescan.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson, callRaw, fakeStore } from "./helpers/http.ts" import { callMultipart } from "./helpers/multipart.ts" diff --git a/tests/folders.test.ts b/tests/folders.test.ts index 9b19a11..f906216 100644 --- a/tests/folders.test.ts +++ b/tests/folders.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/guard_tokens.test.ts b/tests/guard_tokens.test.ts index ecf5e3b..66d493b 100644 --- a/tests/guard_tokens.test.ts +++ b/tests/guard_tokens.test.ts @@ -1,6 +1,7 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { hash, token } from "@atlas/auth" -import { from } from "@atlas/db" +import * as token from "@wess/atlas/auth/token"; +import { hash } from "@wess/atlas/auth/password"; +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { generateBackupCodes, generateSecret, totpAt } from "../src/security/totp.ts" diff --git a/tests/helpers/http.ts b/tests/helpers/http.ts index fbe55d7..06fa125 100644 --- a/tests/helpers/http.ts +++ b/tests/helpers/http.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { router } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { authRoutes } from "../../src/auth/index.ts" import { mfaRoutes } from "../../src/auth/mfa.ts" import { sessionRoutes } from "../../src/auth/sessions.ts" diff --git a/tests/helpers/protocolapp.ts b/tests/helpers/protocolapp.ts index 4c343dc..7058043 100644 --- a/tests/helpers/protocolapp.ts +++ b/tests/helpers/protocolapp.ts @@ -1,5 +1,5 @@ -import type { Connection } from "@atlas/db" -import { router } from "@atlas/server" +import type { Connection } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { actionRoutes } from "../../src/actions/index.ts" import { aiRoutes } from "../../src/ai/routes.ts" import { appRoutes } from "../../src/apps/index.ts" diff --git a/tests/limitbody.test.ts b/tests/limitbody.test.ts index bdd2a46..482baa8 100644 --- a/tests/limitbody.test.ts +++ b/tests/limitbody.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import { get, json, parseJson, pipeline, post, router } from "@atlas/server" +import { get, json, parseJson, pipeline, post, router } from "@wess/atlas/server" import { limitBody } from "../src/util/limitbody/index.ts" const LIMIT = 64 diff --git a/tests/mcp.test.ts b/tests/mcp.test.ts index e5f9035..7bfbcbc 100644 --- a/tests/mcp.test.ts +++ b/tests/mcp.test.ts @@ -1,5 +1,5 @@ import { createHash } from "node:crypto" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { beforeAll, beforeEach, describe, expect, test } from "bun:test" import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/mcpsecurity.test.ts b/tests/mcpsecurity.test.ts index f775243..0f0a5b0 100644 --- a/tests/mcpsecurity.test.ts +++ b/tests/mcpsecurity.test.ts @@ -1,4 +1,4 @@ -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { beforeEach, expect, test } from "bun:test" import { buildToolset, type ToolContext } from "../src/mcp/tools/index.ts" import { checkActionQuota, finishActionWrite } from "../src/actions/quota.ts" diff --git a/tests/oauth.test.ts b/tests/oauth.test.ts index 8eeca84..62d9669 100644 --- a/tests/oauth.test.ts +++ b/tests/oauth.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" import { createHash, randomBytes } from "node:crypto" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { sha256 } from "../src/oauth/helpers.ts" diff --git a/tests/oauth_device.test.ts b/tests/oauth_device.test.ts index 3f9ff6b..f4b8981 100644 --- a/tests/oauth_device.test.ts +++ b/tests/oauth_device.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from, raw } from "@atlas/db" +import { from, raw } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/oidcsecurity.test.ts b/tests/oidcsecurity.test.ts index 35c556d..174c7ab 100644 --- a/tests/oidcsecurity.test.ts +++ b/tests/oidcsecurity.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { router, get, json } from "@atlas/server" +import { router, get, json } from "@wess/atlas/server" import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { clearJwksCache, verifyIdToken } from "../src/auth/oidc/jwks.ts" diff --git a/tests/paging.test.ts b/tests/paging.test.ts index b265d75..4925b4d 100644 --- a/tests/paging.test.ts +++ b/tests/paging.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/passkeysecurity.test.ts b/tests/passkeysecurity.test.ts index 29ed2da..45b3ed0 100644 --- a/tests/passkeysecurity.test.ts +++ b/tests/passkeysecurity.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, test } from "bun:test" import { createHash } from "node:crypto" import { encodeCBOR } from "@levischuck/tiny-cbor" -import { from } from "@atlas/db" -import { router } from "@atlas/server" +import { from } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { passkeyRoutes } from "../src/auth/passkeys.ts" diff --git a/tests/quotas.test.ts b/tests/quotas.test.ts index 0d085e9..745db22 100644 --- a/tests/quotas.test.ts +++ b/tests/quotas.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { computeUsage, checkQuota } from "../src/usage/index.ts" diff --git a/tests/s3gateway.test.ts b/tests/s3gateway.test.ts index 5039a12..a11054d 100644 --- a/tests/s3gateway.test.ts +++ b/tests/s3gateway.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" -import { router } from "@atlas/server" +import { from } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { authRoutes } from "../src/auth/index.ts" import { headersFromRequest, s3Routes } from "../src/s3/index.ts" import { canonicalPath, canonicalQuery, computeSignature, parseAmzDate, parseAuthHeader, sha256OfBytes } from "../src/s3/sigv4.ts" diff --git a/tests/sessions.test.ts b/tests/sessions.test.ts index 63a69b2..e78410e 100644 --- a/tests/sessions.test.ts +++ b/tests/sessions.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" -import { token } from "@atlas/auth" +import { from } from "@wess/atlas/db/query"; +import * as token from "@wess/atlas/auth/token"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/setup.ts b/tests/setup.ts index 28fe4fb..486d266 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -1,7 +1,7 @@ import { SQL } from "bun" -import type { Connection } from "@atlas/db" -import { connect } from "@atlas/db" -import { migrate } from "@atlas/migrate" +import type { Connection } from "@wess/atlas/db/query"; +import { connect } from "@wess/atlas/db/postgres"; +import { migrate } from "@wess/atlas/migrate" import { clearTeamCache } from "../src/teams/resolve.ts" const ADMIN_URL = process.env.TEST_ADMIN_URL ?? "postgres://postgres:postgres@localhost:5432/postgres" diff --git a/tests/shares.test.ts b/tests/shares.test.ts index 5a6758a..68951ce 100644 --- a/tests/shares.test.ts +++ b/tests/shares.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from, raw } from "@atlas/db" -import { hash } from "@atlas/auth" +import { from, raw } from "@wess/atlas/db/query"; +import { hash } from "@wess/atlas/auth/password"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" diff --git a/tests/signup_collabs.test.ts b/tests/signup_collabs.test.ts index c9b37bc..4e0c8e6 100644 --- a/tests/signup_collabs.test.ts +++ b/tests/signup_collabs.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson } from "./helpers/http.ts" import { sha256Hex } from "../src/util/token.ts" diff --git a/tests/spaces.test.ts b/tests/spaces.test.ts index 2b30a5e..f4182d0 100644 --- a/tests/spaces.test.ts +++ b/tests/spaces.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { db, truncateAll, TEST_SECRET } from "./setup.ts" import { buildApp, callJson, callRaw } from "./helpers/http.ts" import { callMultipart } from "./helpers/multipart.ts" diff --git a/tests/teams_admin.test.ts b/tests/teams_admin.test.ts index 0c25658..6826654 100644 --- a/tests/teams_admin.test.ts +++ b/tests/teams_admin.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from, raw } from "@atlas/db" +import { from, raw } from "@wess/atlas/db/query"; import { sweepDeletedTeams } from "../src/teams/admin.ts" import { buildApp, callJson, fakeStore } from "./helpers/http.ts" import { callMultipart } from "./helpers/multipart.ts" diff --git a/tests/teams_auth.test.ts b/tests/teams_auth.test.ts index 50b457f..049d135 100644 --- a/tests/teams_auth.test.ts +++ b/tests/teams_auth.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { buildApp, callJson, resetSentEmails, sentEmails } from "./helpers/http.ts" import { addMember, createTeam, hostOf, login, ROOT, setPassword, signupOwner, teamWithAdmin } from "./helpers/teams.ts" import { db, TEST_SECRET, truncateAll } from "./setup.ts" diff --git a/tests/teams_hardening.test.ts b/tests/teams_hardening.test.ts index 31c3069..1d17a1c 100644 --- a/tests/teams_hardening.test.ts +++ b/tests/teams_hardening.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { countActiveTeamAdmins } from "../src/teams/members.ts" import { teamBySlug } from "../src/teams/resolve.ts" import { parseHost } from "../src/teams/slug.ts" diff --git a/tests/teams_isolation_resources.test.ts b/tests/teams_isolation_resources.test.ts index 80dba8b..fd17a74 100644 --- a/tests/teams_isolation_resources.test.ts +++ b/tests/teams_isolation_resources.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from, raw } from "@atlas/db" +import { from, raw } from "@wess/atlas/db/query"; import { resolvePendingCollabs } from "../src/auth/index.ts" import { buildApp, callJson } from "./helpers/http.ts" import { threeTeams } from "./helpers/isolation.ts" diff --git a/tests/teams_isolation_spaces.test.ts b/tests/teams_isolation_spaces.test.ts index 65f1940..51e8986 100644 --- a/tests/teams_isolation_spaces.test.ts +++ b/tests/teams_isolation_spaces.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { buildApp, callJson } from "./helpers/http.ts" import { threeTeams } from "./helpers/isolation.ts" import { callMultipart } from "./helpers/multipart.ts" diff --git a/tests/teams_isolation_users.test.ts b/tests/teams_isolation_users.test.ts index ae27bcd..52499f7 100644 --- a/tests/teams_isolation_users.test.ts +++ b/tests/teams_isolation_users.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { buildApp, callJson } from "./helpers/http.ts" import { threeTeams } from "./helpers/isolation.ts" import { ROOT } from "./helpers/teams.ts" diff --git a/tests/teams_protocols_auth.test.ts b/tests/teams_protocols_auth.test.ts index 016231a..19fa157 100644 --- a/tests/teams_protocols_auth.test.ts +++ b/tests/teams_protocols_auth.test.ts @@ -1,6 +1,6 @@ import { createHash, randomBytes } from "node:crypto" import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { computeSignature, sha256OfBytes } from "../src/s3/sigv4.ts" import type { App } from "./helpers/http.ts" import { callJson, callRaw, makeRequest } from "./helpers/http.ts" diff --git a/tests/teams_protocols_quota.test.ts b/tests/teams_protocols_quota.test.ts index 738d311..47ba2af 100644 --- a/tests/teams_protocols_quota.test.ts +++ b/tests/teams_protocols_quota.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { computeSignature, sha256OfBytes } from "../src/s3/sigv4.ts" import { finalizeUpload } from "../src/uploads/finalize.ts" import type { App } from "./helpers/http.ts" diff --git a/tests/teams_protocols_rootonly.test.ts b/tests/teams_protocols_rootonly.test.ts index 5b9de7b..58bf124 100644 --- a/tests/teams_protocols_rootonly.test.ts +++ b/tests/teams_protocols_rootonly.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import type { App } from "./helpers/http.ts" import { callJson } from "./helpers/http.ts" import { buildProtocolApp, CASTLE_TOKEN } from "./helpers/protocolapp.ts" diff --git a/tests/transportsecurity.test.ts b/tests/transportsecurity.test.ts index e7e57b2..51f862c 100644 --- a/tests/transportsecurity.test.ts +++ b/tests/transportsecurity.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import { createConn, get, json, pipeline, post, router } from "@atlas/server" +import { createConn, get, json, pipeline, post, router } from "@wess/atlas/server" import { healthRoutes } from "../src/observability/health.ts" import { recordRequest, renderMetrics } from "../src/observability/metrics.ts" import { withSecurityHeaders } from "../src/security/headers.ts" diff --git a/tests/uploads.test.ts b/tests/uploads.test.ts index d51d177..a3507be 100644 --- a/tests/uploads.test.ts +++ b/tests/uploads.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" -import { router } from "@atlas/server" +import { from } from "@wess/atlas/db/query"; +import { router } from "@wess/atlas/server" import { authRoutes } from "../src/auth/index.ts" import { folderRoutes } from "../src/folders/index.ts" import { inviteRoutes } from "../src/invites/index.ts" diff --git a/tests/webdav.test.ts b/tests/webdav.test.ts index 440fda3..7065468 100644 --- a/tests/webdav.test.ts +++ b/tests/webdav.test.ts @@ -1,5 +1,5 @@ import { beforeAll, beforeEach, describe, expect, test } from "bun:test" -import { from } from "@atlas/db" +import { from } from "@wess/atlas/db/query"; import { buildApp, callJson, callRaw } from "./helpers/http.ts" import { db, TEST_SECRET, truncateAll } from "./setup.ts" diff --git a/tests/webhooks.test.ts b/tests/webhooks.test.ts index 8293702..1288db9 100644 --- a/tests/webhooks.test.ts +++ b/tests/webhooks.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test" -import { router } from "@atlas/server" +import { router } from "@wess/atlas/server" import { authRoutes } from "../src/auth/index.ts" import { webhookRoutes } from "../src/webhooks/index.ts" import { callJson } from "./helpers/http.ts" diff --git a/tsconfig.json b/tsconfig.json index 919fa75..36f2bd0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,31 +14,30 @@ "noEmit": true, "types": ["bun"], "paths": { - "@atlas/auth": ["./node_modules/atlas/web/packages/auth/index.ts"], - "@atlas/auth/social": ["./node_modules/atlas/web/packages/auth/social/index.ts"], - "@atlas/cache": ["./node_modules/atlas/web/packages/cache/index.ts"], - "@atlas/cli": ["./node_modules/atlas/web/packages/cli/index.ts"], - "@atlas/config": ["./node_modules/atlas/web/packages/config/index.ts"], - "@atlas/db": ["./node_modules/atlas/web/packages/db/index.ts"], - "@atlas/mcp": ["./node_modules/atlas/web/packages/mcp/index.ts"], - "@atlas/migrate": ["./node_modules/atlas/web/packages/migrate/index.ts"], - "@atlas/oauth": ["./node_modules/atlas/web/packages/oauth/index.ts"], - "@atlas/security": ["./node_modules/atlas/web/packages/security/index.ts"], - "@atlas/server": ["./node_modules/atlas/web/packages/server/index.ts"], - "@atlas/server/ws": ["./node_modules/atlas/web/packages/server/ws/index.ts"], - "@atlas/server/sse": ["./node_modules/atlas/web/packages/server/sse/index.ts"], - "@atlas/share": ["./node_modules/atlas/web/packages/share/index.ts"], - "@atlas/sso": ["./node_modules/atlas/web/packages/sso/index.ts"], - "@atlas/email": ["./node_modules/atlas/web/packages/email/index.ts"], - "@atlas/edge": ["./node_modules/atlas/web/packages/edge/index.ts"], - "@atlas/storage": ["./node_modules/atlas/web/packages/storage/index.ts"], - "@atlas/request": ["./node_modules/atlas/web/packages/request/index.ts"], - "@atlas/request/providers": ["./node_modules/atlas/web/packages/request/providers/index.ts"], - "@atlas/ai": ["./node_modules/atlas/web/packages/ai/index.ts"], - "@atlas/admin": ["./node_modules/atlas/web/packages/admin/index.ts"], - "@atlas/ui": ["./node_modules/atlas/web/packages/ui/index.ts"], - "@atlas/ui/*": ["./node_modules/atlas/web/packages/ui/*/index.tsx"] - } + + + + + + + + + + + + + + + + + + + + + + + + } }, "include": ["src/**/*.ts", "src/**/*.tsx", "scripts/**/*.ts"] }