From a1e4fd4135738dcf18e8672b3b223c54713bbf40 Mon Sep 17 00:00:00 2001 From: botandbang <337765928+botandbang@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:42:59 -0500 Subject: [PATCH 1/2] build(web): move the atproto packages to the Nov 5 spaces alpha Since the Nov 5 alpha (bluesky-social/atproto#5808) the hosted spaces alpha puts a control byte before each record in a STAR archive and ends the archive with another. The Oct 29 reader can't read that framing, so every full repo download failed with errors like "invalid record path: &", where the path it reports is really a length byte. This pins every @atproto and @atproto-labs package to 0.0.0-spaces-alpha-20261105160032. @atproto/space now depends on the new @atproto/star package, which joins the overrides: its caret range would otherwise resolve to 0.0.0-stage, which sorts above the alpha. --- apps/web/README.md | 2 +- apps/web/package.json | 34 +- pnpm-lock.yaml | 807 +++++++++++++++++++++--------------------- pnpm-workspace.yaml | 77 ++-- 4 files changed, 468 insertions(+), 452 deletions(-) diff --git a/apps/web/README.md b/apps/web/README.md index 6426e6a07..fb7499054 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -4,7 +4,7 @@ Promoters find local DJs who fit their shows. DJs (called _projects_: a solo DJ, All data lives on the AT Protocol. Public profiles are ordinary atproto records; everything else (requests, staff roles, the audit log, booking threads, personal planners) lives in [atproto spaces](https://atproto.com/blog/atproto-spaces-alpha), the protocol's permissioned-data extension, where each space's read policy decides who can read it. Published projects, the DJ stats, sets, press kits, shows and follows their managers and fans publish, and the few Bluesky and userinput.app records the site reads are indexed by [HappyView](https://happyview.dev), an AppView whose Lua scripts answer directory search and the show matcher and serve those records to the site. The app keeps its own SQLite index for space data, which it can rebuild from the network, alongside what exists only there (sessions, notifications, press kit view receipts and the geocode cache). Every public record is read through HappyView, never straight from a PDS or Bluesky's AppView (see [Directory](#directory) for the few exceptions); writes go to the PDS. -> Atproto spaces is an alpha (released 2026). This app is built against `@atproto/*@0.0.0-spaces-alpha-20261029171913` and the [0016 spaces proposal](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data). Expect breaking changes upstream; all versions are pinned. +> Atproto spaces is an alpha (released 2026). This app is built against `@atproto/*@0.0.0-spaces-alpha-20261105160032` and the [0016 spaces proposal](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data). Expect breaking changes upstream; all versions are pinned. ## Features diff --git a/apps/web/package.json b/apps/web/package.json index 3aea38c65..1b763386b 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -45,21 +45,21 @@ "test:storybook": "vitest run --project storybook" }, "dependencies": { - "@atproto-labs/did-resolver": "0.0.0-spaces-alpha-20261029171913", - "@atproto-labs/fetch-node": "0.0.0-spaces-alpha-20261029171913", - "@atproto-labs/handle-resolver-node": "0.0.0-spaces-alpha-20261029171913", - "@atproto/api": "0.0.0-spaces-alpha-20261029171913", - "@atproto/common-web": "0.0.0-spaces-alpha-20261029171913", - "@atproto/crypto": "0.0.0-spaces-alpha-20261029171913", - "@atproto/identity": "0.0.0-spaces-alpha-20261029171913", - "@atproto/lex-cbor": "0.0.0-spaces-alpha-20261029171913", - "@atproto/lex-data": "0.0.0-spaces-alpha-20261029171913", - "@atproto/lex-json": "0.0.0-spaces-alpha-20261029171913", - "@atproto/lexicon": "0.0.0-spaces-alpha-20261029171913", - "@atproto/oauth-client-node": "0.0.0-spaces-alpha-20261029171913", - "@atproto/oauth-scopes": "0.0.0-spaces-alpha-20261029171913", - "@atproto/space": "0.0.0-spaces-alpha-20261029171913", - "@atproto/syntax": "0.0.0-spaces-alpha-20261029171913", + "@atproto-labs/did-resolver": "0.0.0-spaces-alpha-20261105160032", + "@atproto-labs/fetch-node": "0.0.0-spaces-alpha-20261105160032", + "@atproto-labs/handle-resolver-node": "0.0.0-spaces-alpha-20261105160032", + "@atproto/api": "0.0.0-spaces-alpha-20261105160032", + "@atproto/common-web": "0.0.0-spaces-alpha-20261105160032", + "@atproto/crypto": "0.0.0-spaces-alpha-20261105160032", + "@atproto/identity": "0.0.0-spaces-alpha-20261105160032", + "@atproto/lex-cbor": "0.0.0-spaces-alpha-20261105160032", + "@atproto/lex-data": "0.0.0-spaces-alpha-20261105160032", + "@atproto/lex-json": "0.0.0-spaces-alpha-20261105160032", + "@atproto/lexicon": "0.0.0-spaces-alpha-20261105160032", + "@atproto/oauth-client-node": "0.0.0-spaces-alpha-20261105160032", + "@atproto/oauth-scopes": "0.0.0-spaces-alpha-20261105160032", + "@atproto/space": "0.0.0-spaces-alpha-20261105160032", + "@atproto/syntax": "0.0.0-spaces-alpha-20261105160032", "@aws-sdk/client-s3": "^3.1159.0", "@fontsource-variable/instrument-sans": "^5.3.0", "@fontsource-variable/jetbrains-mono": "^5.3.0", @@ -80,8 +80,8 @@ "zod": "^4.6.5" }, "devDependencies": { - "@atproto/dev-env": "0.0.0-spaces-alpha-20261029171913", - "@atproto/sync": "0.0.0-spaces-alpha-20261029171913", + "@atproto/dev-env": "0.0.0-spaces-alpha-20261105160032", + "@atproto/sync": "0.0.0-spaces-alpha-20261105160032", "@axe-core/playwright": "^4.13.0", "@lhci/cli": "^0.15.1", "@playwright/test": "^1.63.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb9e8e9c2..6533bbdda 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,44 +163,45 @@ settings: excludeLinksFromLockfile: false overrides: - '@atproto/api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/aws': 0.0.0-spaces-alpha-20261029171913 - '@atproto/bsky': 0.0.0-spaces-alpha-20261029171913 - '@atproto/bsync': 0.0.0-spaces-alpha-20261029171913 - '@atproto/car': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/dev-env': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-builder': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-installer': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-client-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/ozone': 0.0.0-spaces-alpha-20261029171913 - '@atproto/pds': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/space': 0.0.0-spaces-alpha-20261029171913 - '@atproto/sync': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913 + '@atproto/api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/aws': 0.0.0-spaces-alpha-20261105160032 + '@atproto/bsky': 0.0.0-spaces-alpha-20261105160032 + '@atproto/bsync': 0.0.0-spaces-alpha-20261105160032 + '@atproto/car': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/dev-env': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-builder': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-installer': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-client-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/ozone': 0.0.0-spaces-alpha-20261105160032 + '@atproto/pds': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/space': 0.0.0-spaces-alpha-20261105160032 + '@atproto/star': 0.0.0-spaces-alpha-20261105160032 + '@atproto/sync': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032 '@connectrpc/connect-node>undici': ^6.29.1 typed-rest-client>qs: ^6.16.1 '@opentelemetry/sdk-node>@opentelemetry/propagator-jaeger': 2.9.0 @@ -361,50 +362,50 @@ importers: apps/web: dependencies: '@atproto-labs/did-resolver': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/fetch-node': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/handle-resolver-node': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/api': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/common-web': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/crypto': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/identity': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/lex-cbor': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/lex-data': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/lex-json': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/lexicon': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/oauth-client-node': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/oauth-scopes': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/space': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@atproto/syntax': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@aws-sdk/client-s3': specifier: ^3.1159.0 version: 3.1159.0 @@ -461,11 +462,11 @@ importers: version: 4.6.7 devDependencies: '@atproto/dev-env': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) '@atproto/sync': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@axe-core/playwright': specifier: ^4.13.0 version: 4.14.0(playwright-core@1.64.1) @@ -587,8 +588,8 @@ importers: packages/atstore: devDependencies: '@atproto/lex-resolver': - specifier: 0.0.0-spaces-alpha-20261029171913 - version: 0.0.0-spaces-alpha-20261029171913 + specifier: 0.0.0-spaces-alpha-20261105160032 + version: 0.0.0-spaces-alpha-20261105160032 '@fontsource-variable/instrument-sans': specifier: ^5.3.0 version: 5.3.0 @@ -691,32 +692,32 @@ packages: engines: {node: '>= 12.0.0'} hasBin: true - '@atproto-labs/did-resolver@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Nf4r3hH33f7nXU62tjf42lOFC2tlIwsfQVaOr+NFVWGGKSQEqEe23PFO0C7mXzFDWzq50q645ZEhtBrzM2QMEw==} + '@atproto-labs/did-resolver@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-pqiH1Niu/pyMQ0ja7n87VshYeVrzRlv0X2lM3u81CODoKAvU9bCnN9Jhhoh805dPzNonW2o2BeotsDcAM6U9dw==} engines: {node: '>=22'} - '@atproto-labs/fetch-node@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-fEu+aD2sPfAVQjKa9Q4ig2DNNBz7z9CHiyzcHGRwTXVL0RT/Dg9gblYYt2G3fCieGsZ3v0MbvrzHUOBRQs+VcQ==} + '@atproto-labs/fetch-node@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-Yjjo+eu0NNU+lFtPd2hekriSSPTdYVpx09rtSsTMWUpWh5wf4GmSpQgEeCG8mc66DKO59qL8xgSEpx/LJnyUqA==} engines: {node: '>=22'} '@atproto-labs/fetch@0.3.6': resolution: {integrity: sha512-ro/J/cnqIp4bnSzDl8N3SkruvQcE3Pze+1H70mKdFfyFcdhPr+7O4lggl4VCbhI84Yqgz47c0xC6F/Yl39SxDA==} engines: {node: '>=22'} - '@atproto-labs/handle-resolver-node@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-uWFy4QKhMmluDktu4NbM9OCe2rUrdnQFa1xhC939Zls76BSUiHDWdQKA1Hnt+VZUN1oKuKo97ITl1zGA7Tg3uw==} + '@atproto-labs/handle-resolver-node@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-O4fYwo4NrXEhcihLcvnOjYaltmwe8UeYiamBVTH5daTcvsuvH1fkZAxXbvBEGlxG0TSXfszwT/lyPX97ClNcZg==} engines: {node: '>=22'} - '@atproto-labs/handle-resolver@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-+bJNe443JnCJZpcdnFRjHJSC3TBz6N/WfXW9tpYZpVDV2ZkSgYLw8mp66HAQkLnuCQgd/wuiQ6F6mW8wVwh/aw==} + '@atproto-labs/handle-resolver@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-lmLXB3xLPZLx3ljjHp1BySE9NHpSdWotfmZSf/csNRFqR+SouxN7hPIylTyNEe1fGcrSPS7nMXl5qFV+JDWweA==} engines: {node: '>=22'} - '@atproto-labs/identity-resolver@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-WsN0dP8Rs4a7lThqpdjf5tE16Mw3rC8Q0h2M1DIY79URVHFc63Ip7LxCpTPjLjNy5b/mY+SUbkKfFVgioQA/1g==} + '@atproto-labs/identity-resolver@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-IpY6TbqGlJKikEdmgR27bsXeGFcp6aK6+dVXIQw17lg7Jjv1GrfvwT6CjEiCroBO896JEIknfp/qv4lu+YUerg==} engines: {node: '>=22'} - '@atproto-labs/opentelemetry-node@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-JwQGOmzbe3ul0lvFII2DPafC8KzvBJq/Kr34rmJIaL1Ibskgc6Lb6Yyl0IyRVVmoywD6ldsm6oWXZ6EKxGPx/A==} + '@atproto-labs/opentelemetry-node@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-jr6sQf5/8PZ7EA6rjf1FIQ3YWoJL1sBYsXaFMQeXWTo7LfFxM6TbnAgyB0CTkfdGpItHbqOKok0VzEK2FOnrzQ==} engines: {node: '>=22'} '@atproto-labs/pipe@0.2.4': @@ -737,53 +738,53 @@ packages: resolution: {integrity: sha512-vfvoDhu6ds6BT3Pqe+d2/LBU1WpDRtt69y6zltlfMCoucPm82m1j50/Wb6xTvv+oZ+2j0JyZVXsmXQ12SWYQJg==} engines: {node: '>=22'} - '@atproto-labs/xrpc-utils@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-0iqKfGHFaeex6HBK4cjO5dm0IXSSuujaSmnfxSzQqOJGgjlgcWWXy7vXGNhuvCIj1UKblPAiQ+OMPUu6HfwayQ==} + '@atproto-labs/xrpc-utils@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-ETXqS9SJonX0a9gUPz6c45ulrbSiI/ehnlJa19R+a0jffXMJSZ4v03PUxi/OjJtCpJtv5gMcE/+jgqS1R1pxKA==} engines: {node: '>=22'} - '@atproto/api@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-jTido0E9aTOy6ZmNW4Or50gAtRmMc3JabkKU3INYUhAr45Q7AExAafNwC+eS1C2IUQv/nR4BnWXW5hAHr6G0yg==} + '@atproto/api@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-/QrFn46Mh7w5ht1teDq10SLQ44e+NFoUKyEg1yLG7Aer7iXTAicjC1YcFvua9nORY46N3oljLS55nMcj8LqIcQ==} engines: {node: '>=22'} - '@atproto/aws@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Ak6nMfyaBmoQaq0a4WGJgtB1od+Y1qev9n/dQGRTCgrXE2s0CuZlhb11IHT4wlBpML3wiRk9c3GDd7ZXMbyq9Q==} + '@atproto/aws@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-HyOHMTcbUjHmNENccdpd8E8BiSZ21334rJ86vVySUqQCsYmx/ysVGNPu3FFiDllWn7LnV+homWUPC04UNuEeaA==} engines: {node: '>=22'} - '@atproto/bsky@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-rCZhDlLahyO4lbLNOR7Qcr9Qt8vur/e2b+HTG3R6+hNPBPyRKZLanhMUnn3DzT4bcakPChJto+GjTCkO/CLzwQ==} + '@atproto/bsky@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-U5BwLzG6UF/7b9YlsZ1YqlfcpHpwZFlpHYXp4xuJxTtYFi+xsxuHC9s8/C+cF44t8hQ/DNb72vrVV92hTzzijw==} engines: {node: '>=22'} - '@atproto/bsync@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-DTsA/tXBpovXO0QfSnLtnTwcsdccb/exkSf0XhbNV8omHE0r9ZFLvQL/IkejeR5BzuJ/3IoLbqpsJ0NPxTV2Jw==} + '@atproto/bsync@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-OjTyUdJdvHcSX9FmSuJWKCLAss+wtAIE9gRkLu2wjOc4yIGHM8Xexqx3Yjz0FfBMtyvAsxKDJDGRGy4UHCKqDA==} engines: {node: '>=22'} - '@atproto/car@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-u+ovuQjAJkTAjEEld2LAuN+vEvQadLH2UAGHhydeWTDpBZb1lcjtP2IZZ1eYtXRIsc0YCriqyych/XLCJ+cQiQ==} + '@atproto/car@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-YDq+BHlfUkDsbOII+BuqQQFtsCSM3+SX6reVgigJbXOJMgn4EgQvb2L5IXLQNvSGMXBHK9Du2ltraOA9X7bBOg==} engines: {node: '>=22'} - '@atproto/common-web@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-IGpEO/gAoz79lVy7HnNJ9tzElDLXJ0k9GZfKP0e9PV7JYnMBTcXX1LZYAqbcdUP205U8ZY/JYaXuPlDERbD9CA==} + '@atproto/common-web@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-mYAUpD1QborMVi6GtJwl4zGQOk1ZYbtxZ8rp7OdH2kYWoqVemSdrm0y27vrA3HMoE+KE7XrMtZAtsaV8IQf8OQ==} engines: {node: '>=22'} - '@atproto/common@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-aWffhp+2NIZS1mPFJz/Zs02IGI2PlQ3d87qhZXjuMhKUsx5ToDatLPDUtMqn59VvvCqeMXTI07w5dI/11ZWHBw==} + '@atproto/common@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-DVkrueYwAJTO+KKu/IkW+krlixWPuUZHGrzggXt8wrJwenChh5IvtSMbsQM8KnbJX9D9v1xOiyyybqmVIyHVCQ==} engines: {node: '>=22'} - '@atproto/crypto@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-nL2Eaa/gLNcl9X75FY4wvU/GmKcbTpEfPS8uJ3vtQWsEV0aGq7mmmCxkB2clXsOywv+zovBAScNS8iRDwWigQQ==} + '@atproto/crypto@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-3fKgpldF14VvEn/awMuBUdiJNEqtgu5PIizeMx4puOXTOu6oWZ9p0OqDOdPFqQ7VQOgSGtSZzeCBIMCD+Q4kKQ==} engines: {node: '>=22'} - '@atproto/dev-env@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-LrkH9wRaPPHMXlKYr0wlZf+J4S5QGp0Fz7lX3/TI0PimDJ8epiwnycyz3gYbOicwVehC0Xep0RSXfkkYGQg0AA==} + '@atproto/dev-env@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-gWN4edHdJDjXhgilRWte2msMEsFRnk/wgFtqxskHdrcuwj9c/iW6Ym6nvnZBKxcWRiNOYmep8MK5mxeUf+qOrA==} engines: {node: '>=22'} hasBin: true - '@atproto/did@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-zSDSDIFXO7lTPfSwgNTITGJcCpWGO7MAHbE9aF7tKdRc/4c8HsghjrFZxXnydg8UCymbt5+idQjnxcH7TVGIbQ==} + '@atproto/did@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-aiI8nvHhGVn3c7BY+T/Rpqn8/ydrEsuT8wNSS0tPIimqtEouViZCqEwoTSaM54nif3P6Cs3s/NmsLBFshtRb3Q==} engines: {node: '>=22'} - '@atproto/identity@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Fi6c0oxZdW0r8gRlz7iflR+ZnAmKjTPG4zoOI11pK9M+gfBXNyzc3l2JBEj7RlzNTKNVK+p0afKkQ+InkllXgA==} + '@atproto/identity@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-eD0VsntdfWiMZtT/17nb3cDPzko8XipLM1sjSqEifaLQ/WVkLYMNAiq27bQZl0UP6ZPPQfmjkbYoBn4UyAoCFg==} engines: {node: '>=22'} '@atproto/jwk-jose@0.2.4': @@ -798,117 +799,121 @@ packages: resolution: {integrity: sha512-tq7TUDmNfe1yDfpRgdGQMJdl9TUlJmREQNCag9yg5w8Evu+TOiFiLgiOCbo7X4ouRPSgd1DpOzXbUa8UyKKMZA==} engines: {node: '>=22'} - '@atproto/lex-builder@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-SLNd0lr3Q2fgrf4KRKOkUPih0LEurPFnDK0BEW1ZXft7SERx4P4dLTZt3IxmLkFFMzNXG8yktaIGHeDsEuRnew==} + '@atproto/lex-builder@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-NPiH+H3m6s34Z7FVPsfRPoWcLy0wqoh1y4tDHVb+IDkv80ABA52UgvHqHzkQ9is53igKf4xBc+NsXN2QAZSMng==} engines: {node: '>=22'} - '@atproto/lex-cbor@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-ijALiT77KTL3Ro+QDrHwRXEirYMtBQWe16p5/d8dbs1oyaKRRvojMYW2O9iOR7mvDeSfmAB8RXM6Izf5Oe2+dw==} + '@atproto/lex-cbor@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-dO/dTNO7MBEeNpG8gcEe4nnZEYk6sDm1PR0S2GwCeAseO/9XgzJqYar0FhG92zRtimFxfJio5GAKmdVJzFdAjw==} engines: {node: '>=22'} - '@atproto/lex-client@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-5+O85kcNdvJv5EXtzQaTeM3419cN0yOq40GAX6ge7x7qkJYThtuUR6EXCJ4vD4D1VXYXGHG73NtARDeyqrSiPg==} + '@atproto/lex-client@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-2vmImywMxhn9n2iDDZiKXdUGYsmKXBbk98s2pq3W3wVJ94R8524cBnEb3eVKqnZry39tR8p26KlgyyuB1GERWQ==} engines: {node: '>=22'} - '@atproto/lex-data@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-PO9JpQid8J9+lxEesn4k7gfHRcgXTmAXFjmS26gQhxgzoFeJnhbr5DEMPObAkyILgS5qFvyd0JTp2J4COaEQ6Q==} + '@atproto/lex-data@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-oPBQ35NDU5re/b0tRvKm7PKlEzn1LcbJ/L8UpbixOSFwbE33/EYj836WmVY8JESshOkXFcSGjPm0p8Ne//Kiog==} engines: {node: '>=22'} - '@atproto/lex-document@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-QcTi3pAYaVYwR6/fwsNeo3eRyMQc/4sYBLjZWklz8k1Psbp6u7opFJ62gYnrDU/rJckzJ0K8g8qIvzBCxTfg+Q==} + '@atproto/lex-document@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-AWei82KuHFAQ/QG/mqUbNFCfqhKt4jMLjGmsKf0huSnkZUP0NeikIR8OH/AZooJ1vpsY13Y5q/7BKMCc3I7+Sw==} engines: {node: '>=22'} - '@atproto/lex-installer@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-29Wr2s7bHXfDzaeN16mpiEQuth5GqRgOyMdp78ZL65PPe24V4pvqwaDr8l2Jvi1ZfRXvsZmEXlDzys8LvjaVlw==} + '@atproto/lex-installer@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-oUGar5m1tLp9GyeXOYLHWHhnrlD9vvwDmWJWDQzJW8rW3i73gV9YlWiQjfVD0ro7zoGWFnEfdPe9C2y8gr3U1Q==} engines: {node: '>=22'} - '@atproto/lex-json@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-fcZQCIkzMbl+5MFM7peaskOW06PAeLkgLXIlirbJdax87ES+QRbGzN6l/5GlRh74C4+es8mDTK4rCgeUiYC9Dw==} + '@atproto/lex-json@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-0wLiDyR1DG9hY55uspAXoe3jqo76WJtG5yae13cTI69lhAeraC7ZPkn5As/L8qIXRBidh4goHBj1RmxqdeRWWg==} engines: {node: '>=22'} - '@atproto/lex-password-session@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-TiNYWXb7VmEjokTOTb9RO1AKzKnVCRPlE/qWfThELAjPX7Q3CSIbBCBxnh3HaiQXkMFRHuzgJsk/GZlVOzy/Dw==} + '@atproto/lex-password-session@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-QIgvBAAJWP5zqJiuU2txLZgLJ3g+FX4A60v75KeW7scqJg3+bwRgBslpNSPm+fwy+c790vRuJTsXUL/jYDBpUw==} engines: {node: '>=22'} - '@atproto/lex-resolver@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-mKWqfnczE+/xK7y0ZWv66sOjSPbpZIAgL1YdVuwd2e8lE6g7BMhbA6WClcop/C5Lxb4KgLz4Pn4ZK9lL6GvO5Q==} + '@atproto/lex-resolver@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-HaCrrcZX0ZS1NyVdW0+Jxi7zNLL4XwcDFrgfcjDpFxzUl1KnaAyGAYAyQiaSDTGLKTgxg4F1JBjDWGtdmsoz/g==} engines: {node: '>=22'} - '@atproto/lex-schema@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Kzk5o2q6Jt9LEM4nknj3wn0ixOfLLfq9EWnjjR0chnuKpV0UojjbSSugpBVLLQ1xf55OZWlDX5Sjl5oOKviq+w==} + '@atproto/lex-schema@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-i88pl575dXkJc01l1wJJXMlTdGNyQI0GWVKLaqCqcnF+Q7ZTCWpDw6JHTdpjVxiPEriF3EL9BI98dUOORYEVpw==} engines: {node: '>=22'} - '@atproto/lex@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-VodipP8Jw2DAVMPUSnHilljrvmkdn0Ej9csNW7nn0s7MO3RN5Zv6jCgPaHuyMZBi8z0ElxKazXkNva2hAVKrnQ==} + '@atproto/lex@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-BAIndja10iJJz5NZBPXOmqGeh2NNhcTesBfVxGyrU6hdBwEZdUEzGf3hoZRybOnHGq8dsq3Bi9NSRn2kV8SLJA==} engines: {node: '>=22'} hasBin: true - '@atproto/lexicon@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-JKwbXW2/iXTZqzTzYj5D+p842nQ0+E7Xu2EJ9D2MwSfE43A6ToAf3SaEAnMXYL1INuWe++TS2Pb14cElNoMH0g==} + '@atproto/lexicon@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-6gFzYj8u3c31oxisnbwzthm74z+y41ssniWkqLR5cCYD8K3kG9ggIdZP6c3V4iJQ9NB/vP81oOaDgFDFfBDq3g==} engines: {node: '>=22'} - '@atproto/oauth-client-node@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-9Ii3JfRR8yt3bXGh2fS4+EwARyAHHyWKuwu43yhVfnH89cPdllIgiVvcju8HwAXD6v1DHxCM0Ma6k3iSBWkCdQ==} + '@atproto/oauth-client-node@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-8TtrUULBv63G15g4YqcvB7TH5Ti1cX2nZAB4x6D79RuWg4FU3StrqhxZFmzlknpqf+iybDNJcv+uBcw0EJrqKQ==} engines: {node: '>=22'} - '@atproto/oauth-client@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-xBfdKNyizxCAdC9Y0Kxzq0NfESpyw/2D6K/fcEEhzx1JIKgRoQbNkP0AyUYsl96FK9g0w9fR+I/MqO4fiyOW9w==} + '@atproto/oauth-client@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-yrgioKn0jPYmzDxHUMHXAoM1RaYekIKJPMRs3EpTRhcNNiZj2e/RZquqWAf2IW+1vk5EspDNPvCL5wMs6hfOkw==} engines: {node: '>=22'} - '@atproto/oauth-provider-api@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Ngb+/8G4lb6SgO7nhKUUjMJOgWcWLTPi1C7B9Lg6k+/dAAZwZrwqPoAjMxEyKqS57SRRBHAZ/a3Jt6peyWxmRg==} + '@atproto/oauth-provider-api@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-fMfgsM5LVEN/aBeDQE3/zTsQ/Rp7mZB/urzye7uLCR/pATjbJkbm+efXTIgrUOOj4sBeSJ7KlNOTFz2qP+M8lQ==} engines: {node: '>=22'} - '@atproto/oauth-provider-ui@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-tX52W0aLVktqoW6xzVS3LUglZJUzY6UnS9y9yKTXpfNQ3bMk8JYf1fUON/NvmjKpgxuNqV8flcKcrRaHScrHhQ==} + '@atproto/oauth-provider-ui@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-QwM+dHfJnuRj6i6rwHwUyz2ks2OwqpHPxaHMhvYH1sAQrXcjMHwExiZk0A/iACetePpJzbUup+cqL28JKsps0A==} engines: {node: '>=22'} - '@atproto/oauth-provider@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-BxX+9q/BJ4YL4L4fLL+39I14n/doR4B2X0rSgjt1cmZW/Rc7mMc7dx/cXT2h5r2KW/SGVLP88fhjbDC4Zha5tw==} + '@atproto/oauth-provider@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-4ZqYQ+qDorAuaypw9MtlFnlKYhQzHaPhhizKg1FCd2B62X8b9QKGofTsBAQ+fx2vtpxB1ZTq/t3sniraz8YZlw==} engines: {node: '>=22'} - '@atproto/oauth-scopes@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-4B6cx9ycEHrsZzdkBm9x5mXw73U/efqtXNo1ChuodWGIyzcKhzPQ9lsUlKj7FmkHOipnX6Jus5gUHpxqVZO9Lg==} + '@atproto/oauth-scopes@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-7F7I5mATu78oF3EE/ujjmn3O3z7szGNiFoVm1cX0HOp99phVUoKud/bo4LuaK6fb9WeJ/vwneMDCmxd1BFNOUg==} engines: {node: '>=22'} - '@atproto/oauth-types@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-JFnp+huWQY8qx5OC9+ziTK4zuq0/j3rqImAMNDA6n/bLr1TblW0aaktWd5BSiLUMT9Yh0RvklIIbAASnjSxSTg==} + '@atproto/oauth-types@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-eXF+KRdhVlvkIdnIqzR9QPyI+jakNsp2fsMuTO3NZmV7libBm19BJbhSHEywF98ZMLbRIEU9WgQfa60XtwCCdQ==} engines: {node: '>=22'} - '@atproto/ozone@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-08LZDtFUpnEMi6dZlXCutebI7d//+kMW8z2ja2f5KXXSfsbvDFdb+egtgIyCA1MlamuaSgqaPtmmxx3cozRWZw==} + '@atproto/ozone@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-vEmjdnqe3oi3YXU8jzdgq+gMQzfvJJfWxwJhLWoBcKBnwQQYVVxtuba81c7sm9+gDDaK6my0O0iOW5cy/1J9kg==} engines: {node: '>=22'} - '@atproto/pds@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-C4lP3z69WoW27k0JRs8FXPT41bTC6ek2QuYlpGEEOnCk2gEfzmIvoa7JCbgNBy22vbIded9KucF2/XW4byNnnA==} + '@atproto/pds@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-DLG6BIPkRIcDjitqmEKmScqqp9aStW/6nJhOkd/b66BKbDRuT7ro2fYhe7pbPSV/pToc2JUL9X5oDXGd1HC3Wg==} engines: {node: '>=22'} - '@atproto/repo@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-oQWMdBtmogWLLoCK52IycjHlPXb+5+rfqYpfxBQd4Zgg5MnnJV4ZXZFG4XQ/OkfaEsnfjCTomb9FuQwwCdjszw==} + '@atproto/repo@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-nqC7dakknV0dWHoyA6YJuVs1IRHJm7Smfq7Mp/SeFjjNCaGm5CRABzraeUd8ebk6ot+mBbvqhh7TTek+cWwzJA==} engines: {node: '>=22'} - '@atproto/space@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-WuDOjQbovOoI5QsXdN5PsXjrBdqmf5qYF49RF115WhgT8DXUQPqGnqJZEPd3xNP8ZY+j+X9q4Q54yB+uJupQCw==} + '@atproto/space@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-+ICI+XXW0pNYRE01aq+xZZurza9j0VrVrE3mG/Gv9F+rBioSv+99miExXF6A/naJW+jIPgFrgc8a753nKWmSzg==} engines: {node: '>=22'} - '@atproto/sync@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-Nv+ngoKIHWmejGpzihHfdyvGYunEzI44ZLUGIXw8mXGH3p4Z3RHAPxXF+hIfDL9vF4kgOXYmD3CccP4WdvJDMw==} + '@atproto/star@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-MTeZW52Ym8gPUxcWdDOFqzHi9qgVZy6B7ZbenjRGL84sPWtKwZDKJstUmp0NgH8TykcklZOjmO1X10v0QBximQ==} engines: {node: '>=22'} - '@atproto/syntax@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-GQle+tl5im+7Z55D9PcWAGNpT3GpdNbD6fatZr68A20CPhd2e8cj68+n12HTL7k2E/3t8RmeLjjonmmuGFGXtw==} + '@atproto/sync@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-UDtnHF/WO0geM1V3gIG04GZ/TtRtjhQYFhQCRtrTN0yacg8XS8hZgwwFqMJfI8hfe5w3ANWdNh57xk1cf+STuA==} + engines: {node: '>=22'} + + '@atproto/syntax@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-XW+S/xGd3AbmLLtOIxhTKjZWvq+dI3YoXX2UD7IKt4VJCBW0/LMTV/esh24m1jWzj1wNjnmPgPDpUIr3NWrgPQ==} engines: {node: '>=22'} '@atproto/ws-client@0.2.1': resolution: {integrity: sha512-HCGkqH/Ksxpgg/xCyIvH5hK6o8Lg2PxcEA790GCEV9MspCZB/xIesHZVgJN0cEvklGe+6pNCOZE1B5kj9q1ONA==} engines: {node: '>=22'} - '@atproto/xrpc-server@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-5lqdM8LqjtQnB3id1o31ln6mkxfheoN77JcJKUufWGcqVq4/5smXrtdsl7AXqULjx6ZcuB/mjjfSaoXykiN5CQ==} + '@atproto/xrpc-server@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-LIv4nyekvtjgiKl59lALlvnlMiDpwJltIFyZu/GH3CbfI5Z0gwTX9xvAW3XnjgSSHqFqk0CriLB6l5duM7E03g==} engines: {node: '>=22'} - '@atproto/xrpc@0.0.0-spaces-alpha-20261029171913': - resolution: {integrity: sha512-P/icLBGZOiJHTkVosKe0Lli7XlxwAiyJRFJD/fdpqixdkuU+p80R2t7Kk4g+ZrkNR90dhFbLdYyhf+B0AH2QOA==} + '@atproto/xrpc@0.0.0-spaces-alpha-20261105160032': + resolution: {integrity: sha512-uT9Z5hsxdRiO96b2Os1CdmIauDM61zydNmv4C5sga2wFnP3K+Acgn3ETF1bICqrDDdyKXACS1yvZD2/5/ks6dg==} engines: {node: '>=22'} '@aws-sdk/checksums@3.1001.7': @@ -3633,12 +3638,16 @@ packages: '@smithy/core@3.35.1': resolution: {integrity: sha512-i4YPS4B6ts7bjn7UwLnGjiZdprOvHvgGobFZsYK3GIY3E5hIqtj0rReU69BcTpGp+fvtraSNXeG1l+jtJvF55w==} engines: {node: '>=18.0.0'} - deprecated: Deprecated due to a bug in custom logger data redaction. See https://github.com/aws/aws-sdk-js-v3/issues/8393. + deprecated: |- + Deprecated due to a bug in custom logger data redaction. Upgrade to the latest version. If you used a custom logger with this + version, review your logs and rotate any credentials or other secrets. See https://github.com/aws/aws-sdk-js-v3/issues/8393. '@smithy/core@3.37.0': resolution: {integrity: sha512-97imTcCyiPd8k0e9+ts/Sp0W65Dn9Ti357J7M09Ov4tI8Q1JDJVFSoAJtjEVKqfHEr3Pdo2jfolqKCaaiszH0g==} engines: {node: '>=18.0.0'} - deprecated: Deprecated due to a bug in custom logger data redaction. See https://github.com/aws/aws-sdk-js-v3/issues/8393. + deprecated: |- + Deprecated due to a bug in custom logger data redaction. Upgrade to the latest version. If you used a custom logger with this + version, review your logs and rotate any credentials or other secrets. See https://github.com/aws/aws-sdk-js-v3/issues/8393. '@smithy/credential-provider-imds@4.5.2': resolution: {integrity: sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==} @@ -8067,16 +8076,16 @@ snapshots: '@ast-grep/cli-win32-ia32-msvc': 0.51.0 '@ast-grep/cli-win32-x64-msvc': 0.51.0 - '@atproto-labs/did-resolver@0.0.0-spaces-alpha-20261029171913': + '@atproto-labs/did-resolver@0.0.0-spaces-alpha-20261105160032': dependencies: '@atproto-labs/fetch': 0.3.6 '@atproto-labs/pipe': 0.2.4 '@atproto-labs/simple-store': 0.5.1 '@atproto-labs/simple-store-memory': 0.2.6 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 zod: 3.25.76 - '@atproto-labs/fetch-node@0.0.0-spaces-alpha-20261029171913': + '@atproto-labs/fetch-node@0.0.0-spaces-alpha-20261105160032': dependencies: '@atproto-labs/fetch': 0.3.6 '@atproto-labs/pipe': 0.2.4 @@ -8089,25 +8098,25 @@ snapshots: dependencies: '@atproto-labs/pipe': 0.2.4 - '@atproto-labs/handle-resolver-node@0.0.0-spaces-alpha-20261029171913': + '@atproto-labs/handle-resolver-node@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 - '@atproto-labs/handle-resolver@0.0.0-spaces-alpha-20261029171913': + '@atproto-labs/handle-resolver@0.0.0-spaces-alpha-20261105160032': dependencies: '@atproto-labs/simple-store': 0.5.1 '@atproto-labs/simple-store-memory': 0.2.6 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 zod: 3.25.76 - '@atproto-labs/identity-resolver@0.0.0-spaces-alpha-20261029171913': + '@atproto-labs/identity-resolver@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261105160032 - '@atproto-labs/opentelemetry-node@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto-labs/opentelemetry-node@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/auto-instrumentations-node': 0.77.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.11.0(@opentelemetry/api@1.9.1))(supports-color@5.5.0) @@ -8139,32 +8148,32 @@ snapshots: '@atproto-labs/simple-store@0.5.1': {} - '@atproto-labs/xrpc-utils@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto-labs/xrpc-utils@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@atproto/api@0.0.0-spaces-alpha-20261029171913': + '@atproto/api@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 await-lock: 3.0.0 multiformats: 13.4.2 tlds: 1.261.0 zod: 3.25.76 - '@atproto/aws@0.0.0-spaces-alpha-20261029171913': + '@atproto/aws@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 '@aws-sdk/client-cloudfront': 3.1146.0 '@aws-sdk/client-kms': 3.1146.0 '@aws-sdk/client-s3': 3.1159.0 @@ -8173,21 +8182,21 @@ snapshots: multiformats: 13.4.2 uint8arrays: 5.1.1 - '@atproto/bsky@0.0.0-spaces-alpha-20261029171913(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': - dependencies: - '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto-labs/xrpc-utils': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/sync': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/bsky@0.0.0-spaces-alpha-20261105160032(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': + dependencies: + '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto-labs/xrpc-utils': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/sync': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@bufbuild/protobuf': 1.10.1 '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) '@connectrpc/connect-express': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect-node@1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)))(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) @@ -8231,11 +8240,11 @@ snapshots: - supports-color - utf-8-validate - '@atproto/bsync@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto/bsync@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: - '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 '@bufbuild/protobuf': 1.10.1 '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) '@connectrpc/connect-node': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) @@ -8249,49 +8258,49 @@ snapshots: - pg-native - supports-color - '@atproto/car@0.0.0-spaces-alpha-20261029171913': + '@atproto/car@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 varint: 6.0.0 - '@atproto/common-web@0.0.0-spaces-alpha-20261029171913': + '@atproto/common-web@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 zod: 3.25.76 - '@atproto/common@0.0.0-spaces-alpha-20261029171913': + '@atproto/common@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 multiformats: 13.4.2 pino: 10.4.0 - '@atproto/crypto@0.0.0-spaces-alpha-20261029171913': + '@atproto/crypto@0.0.0-spaces-alpha-20261105160032': dependencies: '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 uint8arrays: 5.1.1 - '@atproto/dev-env@0.0.0-spaces-alpha-20261029171913(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': - dependencies: - '@atproto/api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/bsky': 0.0.0-spaces-alpha-20261029171913(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) - '@atproto/bsync': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 - '@atproto/ozone': 0.0.0-spaces-alpha-20261029171913(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) - '@atproto/pds': 0.0.0-spaces-alpha-20261029171913(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) - '@atproto/sync': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/dev-env@0.0.0-spaces-alpha-20261105160032(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': + dependencies: + '@atproto/api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/bsky': 0.0.0-spaces-alpha-20261105160032(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) + '@atproto/bsync': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 + '@atproto/ozone': 0.0.0-spaces-alpha-20261105160032(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) + '@atproto/pds': 0.0.0-spaces-alpha-20261105160032(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) + '@atproto/sync': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@did-plc/lib': 0.0.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) '@did-plc/server': 0.0.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) dotenv: 17.4.2 @@ -8309,14 +8318,14 @@ snapshots: - supports-color - utf-8-validate - '@atproto/did@0.0.0-spaces-alpha-20261029171913': + '@atproto/did@0.0.0-spaces-alpha-20261105160032': dependencies: zod: 3.25.76 - '@atproto/identity@0.0.0-spaces-alpha-20261029171913': + '@atproto/identity@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk-jose@0.2.4': dependencies: @@ -8334,155 +8343,155 @@ snapshots: multiformats: 13.4.2 zod: 3.25.76 - '@atproto/lex-builder@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-builder@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 prettier: 3.9.9 ts-morph: 27.0.2 tslib: 2.8.1 - '@atproto/lex-cbor@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-cbor@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 cborg: 4.5.8 tslib: 2.8.1 - '@atproto/lex-client@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-client@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 - '@atproto/lex-data@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-data@0.0.0-spaces-alpha-20261105160032': dependencies: multiformats: 13.4.2 tslib: 2.8.1 unicode-segmenter: 0.14.5 - '@atproto/lex-document@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-document@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 core-js: 3.50.0 tslib: 2.8.1 - '@atproto/lex-installer@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-installer@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-builder': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-builder': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 - '@atproto/lex-json@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-json@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 - '@atproto/lex-password-session@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-password-session@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 - '@atproto/lex-resolver@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-resolver@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 - '@atproto/lex-schema@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex-schema@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 '@standard-schema/spec': 1.1.0 tslib: 2.8.1 - '@atproto/lex@0.0.0-spaces-alpha-20261029171913': + '@atproto/lex@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lex-builder': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-installer': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-builder': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-installer': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 tslib: 2.8.1 yargs: 18.2.0 - '@atproto/lexicon@0.0.0-spaces-alpha-20261029171913': + '@atproto/lexicon@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 multiformats: 13.4.2 zod: 3.25.76 - '@atproto/oauth-client-node@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-client-node@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/handle-resolver-node': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/handle-resolver-node': 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/simple-store': 0.5.1 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk': 0.7.4 '@atproto/jwk-jose': 0.2.4 '@atproto/jwk-webcrypto': 0.3.4 - '@atproto/oauth-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 + '@atproto/oauth-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 - '@atproto/oauth-client@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-client@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/fetch': 0.3.6 - '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/identity-resolver': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/handle-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/identity-resolver': 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/simple-store': 0.5.1 '@atproto-labs/simple-store-memory': 0.2.6 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk': 0.7.4 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 core-js: 3.50.0 multiformats: 13.4.2 zod: 3.25.76 - '@atproto/oauth-provider-api@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-provider-api@0.0.0-spaces-alpha-20261105160032': dependencies: '@atproto/jwk': 0.7.4 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 - '@atproto/oauth-provider-ui@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-provider-ui@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261029171913 + '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261105160032 - '@atproto/oauth-provider@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto/oauth-provider@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: - '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/handle-resolver-node': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/did-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/handle-resolver-node': 0.0.0-spaces-alpha-20261105160032 '@atproto-labs/pipe': 0.2.4 '@atproto-labs/simple-store': 0.5.1 '@atproto-labs/simple-store-memory': 0.2.6 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk': 0.7.4 '@atproto/jwk-jose': 0.2.4 - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 '@hapi/accept': 6.0.3 '@hapi/address': 5.1.1 '@hapi/bourne': 3.0.0 @@ -8497,29 +8506,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@atproto/oauth-scopes@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-scopes@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 - '@atproto/oauth-types@0.0.0-spaces-alpha-20261029171913': + '@atproto/oauth-types@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk': 0.7.4 zod: 3.25.76 - '@atproto/ozone@0.0.0-spaces-alpha-20261029171913(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': + '@atproto/ozone@0.0.0-spaces-alpha-20261105160032(@opentelemetry/api@1.9.1)(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': dependencies: - '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 '@atproto/ws-client': 0.2.1 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@did-plc/lib': 0.0.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) '@opentelemetry/instrumentation-pg': 0.72.0(@opentelemetry/api@1.9.1)(supports-color@5.5.0) compression: 1.8.2(supports-color@5.5.0) @@ -8546,32 +8555,33 @@ snapshots: - supports-color - utf-8-validate - '@atproto/pds@0.0.0-spaces-alpha-20261029171913(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': + '@atproto/pds@0.0.0-spaces-alpha-20261105160032(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': dependencies: '@atproto-labs/fetch': 0.3.6 - '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto-labs/fetch-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto-labs/opentelemetry-node': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@atproto-labs/simple-store': 0.5.1 '@atproto-labs/simple-store-memory': 0.2.6 '@atproto-labs/simple-store-redis': 0.1.6(ioredis@5.11.1(supports-color@5.5.0)) - '@atproto-labs/xrpc-utils': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/aws': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 + '@atproto-labs/xrpc-utils': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/aws': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 '@atproto/jwk': 0.7.4 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) - '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/space': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) + '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/space': 0.0.0-spaces-alpha-20261105160032 + '@atproto/star': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) '@did-plc/lib': 0.0.4(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) '@hapi/address': 5.1.1 '@noble/curves': 1.9.7 @@ -8607,36 +8617,41 @@ snapshots: - supports-color - utf-8-validate - '@atproto/repo@0.0.0-spaces-alpha-20261029171913': + '@atproto/repo@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/car': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/car': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 zod: 3.25.76 - '@atproto/space@0.0.0-spaces-alpha-20261029171913': + '@atproto/space@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/car': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/star': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 '@noble/hashes': 1.8.0 structured-headers: 1.0.1 zod: 3.25.76 - '@atproto/sync@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto/star@0.0.0-spaces-alpha-20261105160032': + dependencies: + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + + '@atproto/sync@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0) + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0) p-queue: 8.1.1 ws: 8.22.0 transitivePeerDependencies: @@ -8644,7 +8659,7 @@ snapshots: - supports-color - utf-8-validate - '@atproto/syntax@0.0.0-spaces-alpha-20261029171913': + '@atproto/syntax@0.0.0-spaces-alpha-20261105160032': dependencies: iso-datestring-validator: 2.2.2 tslib: 2.8.1 @@ -8656,18 +8671,18 @@ snapshots: - bufferutil - utf-8-validate - '@atproto/xrpc-server@0.0.0-spaces-alpha-20261029171913(supports-color@5.5.0)': + '@atproto/xrpc-server@0.0.0-spaces-alpha-20261105160032(supports-color@5.5.0)': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 '@atproto/ws-client': 0.2.1 - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 express: 4.22.3(supports-color@5.5.0) http-errors: 2.0.1 mime-types: 3.0.2 @@ -8678,9 +8693,9 @@ snapshots: - supports-color - utf-8-validate - '@atproto/xrpc@0.0.0-spaces-alpha-20261029171913': + '@atproto/xrpc@0.0.0-spaces-alpha-20261105160032': dependencies: - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 zod: 3.25.76 '@aws-sdk/checksums@3.1001.7': @@ -9214,8 +9229,8 @@ snapshots: '@did-plc/lib@0.0.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 '@ipld/dag-cbor': 7.0.3 axios: 1.20.0(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) multiformats: 9.9.0 @@ -9227,8 +9242,8 @@ snapshots: '@did-plc/lib@0.0.4(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 '@ipld/dag-cbor': 7.0.3 axios: 1.20.0(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) multiformats: 9.9.0 @@ -9240,8 +9255,8 @@ snapshots: '@did-plc/server@0.0.1(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0)': dependencies: - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 '@did-plc/lib': 0.0.4(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) axios: 1.20.0(debug@4.4.3(supports-color@5.5.0))(supports-color@5.5.0) cors: 2.8.6 @@ -9688,7 +9703,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.11.2 + '@emnapi/runtime': 1.11.3 optional: true '@img/sharp-wasm32@0.35.5': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3cca40717..2ddb5861f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,44 +14,45 @@ allowBuilds: '@ast-grep/cli': true # Atproto Spaces alpha: pin every @atproto package to the same alpha build. overrides: - '@atproto/api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/aws': 0.0.0-spaces-alpha-20261029171913 - '@atproto/bsky': 0.0.0-spaces-alpha-20261029171913 - '@atproto/bsync': 0.0.0-spaces-alpha-20261029171913 - '@atproto/car': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common': 0.0.0-spaces-alpha-20261029171913 - '@atproto/common-web': 0.0.0-spaces-alpha-20261029171913 - '@atproto/crypto': 0.0.0-spaces-alpha-20261029171913 - '@atproto/dev-env': 0.0.0-spaces-alpha-20261029171913 - '@atproto/did': 0.0.0-spaces-alpha-20261029171913 - '@atproto/identity': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-builder': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-data': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-document': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-installer': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-json': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lex-schema': 0.0.0-spaces-alpha-20261029171913 - '@atproto/lexicon': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-client': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-client-node': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261029171913 - '@atproto/oauth-types': 0.0.0-spaces-alpha-20261029171913 - '@atproto/ozone': 0.0.0-spaces-alpha-20261029171913 - '@atproto/pds': 0.0.0-spaces-alpha-20261029171913 - '@atproto/repo': 0.0.0-spaces-alpha-20261029171913 - '@atproto/space': 0.0.0-spaces-alpha-20261029171913 - '@atproto/sync': 0.0.0-spaces-alpha-20261029171913 - '@atproto/syntax': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc': 0.0.0-spaces-alpha-20261029171913 - '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261029171913 + '@atproto/api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/aws': 0.0.0-spaces-alpha-20261105160032 + '@atproto/bsky': 0.0.0-spaces-alpha-20261105160032 + '@atproto/bsync': 0.0.0-spaces-alpha-20261105160032 + '@atproto/car': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common': 0.0.0-spaces-alpha-20261105160032 + '@atproto/common-web': 0.0.0-spaces-alpha-20261105160032 + '@atproto/crypto': 0.0.0-spaces-alpha-20261105160032 + '@atproto/dev-env': 0.0.0-spaces-alpha-20261105160032 + '@atproto/did': 0.0.0-spaces-alpha-20261105160032 + '@atproto/identity': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-builder': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-cbor': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-data': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-document': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-installer': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-json': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-password-session': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-resolver': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lex-schema': 0.0.0-spaces-alpha-20261105160032 + '@atproto/lexicon': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-client': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-client-node': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-api': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-provider-ui': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-scopes': 0.0.0-spaces-alpha-20261105160032 + '@atproto/oauth-types': 0.0.0-spaces-alpha-20261105160032 + '@atproto/ozone': 0.0.0-spaces-alpha-20261105160032 + '@atproto/pds': 0.0.0-spaces-alpha-20261105160032 + '@atproto/repo': 0.0.0-spaces-alpha-20261105160032 + '@atproto/space': 0.0.0-spaces-alpha-20261105160032 + '@atproto/star': 0.0.0-spaces-alpha-20261105160032 + '@atproto/sync': 0.0.0-spaces-alpha-20261105160032 + '@atproto/syntax': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc': 0.0.0-spaces-alpha-20261105160032 + '@atproto/xrpc-server': 0.0.0-spaces-alpha-20261105160032 # Dev-only paths whose own ranges keep a version with known advisories. # connect-node 1.7.0 (atproto dev network) only takes Headers from undici, and only on Node < 18. '@connectrpc/connect-node>undici': ^6.29.1 From 0f72a32ddf074e8439f8b9952c7d5a86d985b6d8 Mon Sep 17 00:00:00 2001 From: botandbang <337765928+botandbang@users.noreply.github.com> Date: Mon, 9 Nov 2026 17:43:03 -0500 Subject: [PATCH 2/2] fix(web): refresh a KEM key only when a MAC fails, and skip taken-down writers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isMacFailure counted every RepoVerificationError as a MAC failure. verifyRepoStar throws that error for an archive that doesn't parse as well as for a commit that fails its MAC, so a parse error got a KEM key refresh and a second download that couldn't help, and the log said the MAC didn't verify. A full download now reads the archive with readRepoStar and checks the commit with verifyCommit, throwing SpaceMacError as the oplog path does, and only SpaceMacError counts as a MAC failure. Anything else fails the repo with the reader's own message and goes through the usual retry and backoff. A writer whose repo host answers RepoTakendown, RepoSuspended or RepoDeactivated is skipped: no fallback to a full download, and the pass doesn't fail on its account. The repo keeps its retry row, so it's tried again on the usual backoff and picked up once the account is back, and the system page shows the error on the space and on the repo. A repo that has never synced now gets a line of its own there too ("never synced" and its error), where before only the space's error said anything about it, and a repo's error is set off by " · " again. The same errors from getSpaceCredential or listRepos (bluesky-social/atproto#5810) mean the authority is taken down or deactivated, which only suspends the space. The pass stops as before and the local copy stays, now with tests that check it. --- apps/web/README.md | 2 +- .../web/src/lib/server/atproto/credentials.ts | 8 +- apps/web/src/lib/server/sync/engine.test.ts | 114 ++++++++++++++++++ apps/web/src/lib/server/sync/engine.ts | 63 ++++++++-- apps/web/src/routes/admin/system/+page.svelte | 2 +- .../routes/admin/system/page.svelte.test.ts | 31 +++++ 6 files changed, 205 insertions(+), 15 deletions(-) diff --git a/apps/web/README.md b/apps/web/README.md index fb7499054..7d2574911 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -207,7 +207,7 @@ A mix whose link is a plyr.fm track (`https://plyr.fm/track/`) also gets a ` ### Sync -The app is a space syncer. For each watched space it asks the space host (the authority's PDS) for a space credential, sending a delegation token from the root's PDS and a fresh P-256 key the credential is bound to, and signs every request with that key (RFC 9421). It enumerates writers with `listRepos`, pulls each repo's oplog with `listRepoOps`, and checks the result against the repo's LtHash commit, falling back to a full download (`getRepo`, a STAR archive) when needed. Commits and records aren't signed: the repo host MACs each response with a secret shared for that one request, derived from the author's `#atproto_kem` key. When a MAC fails, the app refetches the author's DID document once, in case the key rotated. Accounts whose DID document has no KEM key can't be synced, and the system page says so. A deleted space is dropped with everything derived from it, however often the authority says so, and a space recreated under the same URI syncs from scratch. A repo that fails doesn't hold back the others: the pass carries on through the space's later pages, and the repo is retried on its own, after a minute at first and at most an hour once it keeps failing. A record whose projection into the app's tables fails, such as an inquiry read while the directory is down, waits on the same schedule and shows on the system page until it goes through ([ADR 0009](../../docs/adr/0009-synced-records-queue-for-projection.md)). It registers for `notifyWrite` (verified with inter-service auth) and also polls. Records are validated against the lexicons, and authority rules are enforced: only root-authored decisions, roles, and details count, a press kit's grants count only from their space's authority (in a project's request space, only for a press kit of that project) and drafts only from the project's current managers, a booking thread's project comes from the root's opening record (or the root's audit copy of its creation) rather than the inquiry, booking records from non-participants are ignored, and a booking status record counts only when the thread's rules allow its author that move ([ADR 0008](../../docs/adr/0008-booking-status-follows-the-rules-not-record-dates.md)). +The app is a space syncer. For each watched space it asks the space host (the authority's PDS) for a space credential, sending a delegation token from the root's PDS and a fresh P-256 key the credential is bound to, and signs every request with that key (RFC 9421). It enumerates writers with `listRepos`, pulls each repo's oplog with `listRepoOps`, and checks the result against the repo's LtHash commit, falling back to a full download (`getRepo`, a STAR archive) when needed. Commits and records aren't signed: the repo host MACs each response with a secret shared for that one request, derived from the author's `#atproto_kem` key. When a MAC fails, the app refetches the author's DID document once, in case the key rotated. Accounts whose DID document has no KEM key can't be synced, and the system page says so. A deleted space is dropped with everything derived from it, however often the authority says so, and a space recreated under the same URI syncs from scratch. A repo that fails doesn't hold back the others: the pass carries on through the space's later pages, and the repo is retried on its own, after a minute at first and at most an hour once it keeps failing. A writer whose account is taken down, suspended, or deactivated is skipped the same way without failing the pass, and the system page shows why. A space whose authority is taken down or deactivated is only suspended, so its local copy stays. A record whose projection into the app's tables fails, such as an inquiry read while the directory is down, waits on the same schedule and shows on the system page until it goes through ([ADR 0009](../../docs/adr/0009-synced-records-queue-for-projection.md)). It registers for `notifyWrite` (verified with inter-service auth) and also polls. Records are validated against the lexicons, and authority rules are enforced: only root-authored decisions, roles, and details count, a press kit's grants count only from their space's authority (in a project's request space, only for a press kit of that project) and drafts only from the project's current managers, a booking thread's project comes from the root's opening record (or the root's audit copy of its creation) rather than the inquiry, booking records from non-participants are ignored, and a booking status record counts only when the thread's rules allow its author that move ([ADR 0008](../../docs/adr/0008-booking-status-follows-the-rules-not-record-dates.md)). ### Directory diff --git a/apps/web/src/lib/server/atproto/credentials.ts b/apps/web/src/lib/server/atproto/credentials.ts index 2ff3eb5e4..dc99ec667 100644 --- a/apps/web/src/lib/server/atproto/credentials.ts +++ b/apps/web/src/lib/server/atproto/credentials.ts @@ -11,7 +11,6 @@ import { parseMacHeader, parseSpaceToken, RECORD_MAC_TYPE, - RepoVerificationError, SpaceMacError, verifyRecord, WANT_MAC_HEADER @@ -49,9 +48,12 @@ export function isCredentialRejected(cause: unknown): boolean { return cause instanceof XrpcResponseError && (cause.status === 401 || CREDENTIAL_REJECTED.has(cause.error)); } -/** Whether a response's MAC didn't verify. `verifyRepoStar` reports a commit that fails its MAC as a RepoVerificationError. */ +/** + * Whether a response's MAC didn't verify. Not a RepoVerificationError: that also covers an archive that doesn't + * parse, which a fresh KEM key can't fix. + */ export function isMacFailure(cause: unknown): boolean { - return cause instanceof SpaceMacError || cause instanceof RepoVerificationError; + return cause instanceof SpaceMacError; } type RequestInput = { diff --git a/apps/web/src/lib/server/sync/engine.test.ts b/apps/web/src/lib/server/sync/engine.test.ts index cdcfd658c..2c792b8e8 100644 --- a/apps/web/src/lib/server/sync/engine.test.ts +++ b/apps/web/src/lib/server/sync/engine.test.ts @@ -325,6 +325,15 @@ describe('SpaceSyncer against a repo host', () => { ]); }); + it('reports it with the space, though it never synced', async () => { + const s = await failOnce(); + + expect((await s.status())[0].repos).toEqual([ + { did: DJ, rev: expect.any(String), lastSyncedAt: expect.any(String), lastError: null }, + { did: BAD, rev: null, lastSyncedAt: null, lastError: 'UpstreamFailure' } + ]); + }); + it('retries it after its backoff, though listRepos no longer lists it', async () => { const s = await failOnce(); host.repoErrors.clear(); @@ -621,6 +630,111 @@ describe('SpaceSyncer against a repo host', () => { ); }); + /** Has the host's getRepo archive rewritten by `edit`, keeping its MAC header. */ + const editArchive = (edit: (archive: Buffer) => Buffer) => + tamper(['getRepo'], async (response) => { + const archive = edit(Buffer.from(await response.arrayBuffer())); + + return new Response(new Uint8Array(archive), { headers: response.headers }); + }); + + it('reads a repo archive framed with control bytes, as the alpha host has sent since Nov 5', async () => { + const s = await syncer(); + await host.put(DJ, NOTE, 'a', note('one')); + const served: Buffer[] = []; + editArchive((archive) => (served.push(archive), archive)); + + await s.sync(SPACE); + expect(await records()).toEqual([['a', 'one']]); + // Each record follows a 0x01 byte, and a 0x00 byte ends the archive. + const path = Buffer.from(`${NOTE}/a`); + expect(served[0].includes(Buffer.concat([Buffer.from([1, path.length]), path]))).toBe(true); + expect(served[0].at(-1)).toBe(0); + }); + + describe('a repo archive that does not read', () => { + const PATH = `${NOTE}/a`; + + it.each([ + ['is cut off before its end byte', (archive: Buffer) => archive.subarray(0, -1), 'unexpected end of archive'], + [ + 'has a record path that is not one', + (archive: Buffer) => archive.fill('&', archive.indexOf(PATH), archive.indexOf(PATH) + 1), + `invalid NSID in record path: &${PATH.slice(1)}` + ] + ])("fails the repo when it %s, with the reader's error, and keeps the KEM key", async (_, edit, message) => { + const s = await syncer(); + await host.put(DJ, NOTE, 'a', note('one')); + editArchive(edit); + + await expect(s.sync(SPACE)).rejects.toThrow(message); + expect(host.identity.refreshed).toEqual([]); + expect(calls('getRepo')).toHaveLength(1); + expect(await db.selectFrom('syncRepoRetry').select('lastError').execute()).toEqual([{ lastError: message }]); + }); + }); + + it('refreshes the KEM key once when a full download fails its MAC', async () => { + const s = await syncer(); + await host.put(DJ, NOTE, 'a', note('one')); + host.forgeMacs = true; + + await expect(s.sync(SPACE)).rejects.toThrow('Commit does not match its MAC'); + expect(host.identity.refreshed).toEqual([DJ]); + expect(calls('getRepo')).toHaveLength(2); + expect(await records()).toEqual([]); + }); + + it.each(['RepoTakendown', 'RepoSuspended', 'RepoDeactivated'])( + 'skips a writer whose repo host answers %s, without failing the pass or downloading the repo', + async (error) => { + const WRITER = 'did:plc:writer'; + const s = await syncer(); + await host.put(DJ, NOTE, 'a', note('one')); + await host.put(WRITER, NOTE, 'b', note('two')); + await s.sync(SPACE); + const downloads = calls('getRepo').length; + + host.repoErrors.set(WRITER, error); + await host.put(WRITER, NOTE, 'c', note('three')); + await host.put(DJ, NOTE, 'd', note('four')); + await s.sync(SPACE); + + expect(calls('getRepo')).toHaveLength(downloads); + expect(await records()).toEqual([ + ['a', 'one'], + ['b', 'two'], + ['d', 'four'] + ]); + expect(await db.selectFrom('syncRepoRetry').select(['repoDid', 'lastError']).execute()).toEqual([ + { repoDid: WRITER, lastError: error } + ]); + const status = (await s.status())[0]; + expect(status.lastError).toBe(error); + expect(status.repos.find((repo) => repo.did === WRITER)?.lastError).toBe(error); + } + ); + + it.each(['RepoTakendown', 'RepoDeactivated'])( + 'keeps a space whose authority answers %s, since that only suspends it', + async (error) => { + await host.put(DJ, NOTE, 'a', note('one')); + await (await syncer()).sync(SPACE); + + host.overrides.set('com.atproto.space.listRepos', () => Response.json({ error }, { status: 400 })); + await expect((await syncer()).sync(SPACE)).rejects.toThrow(error); + host.overrides.clear(); + host.credentialError = error; + // A new syncer has no credential cached, so it asks the authority for one. + await expect((await syncer()).sync(SPACE)).rejects.toThrow(error); + + expect(dropped).toEqual([]); + expect(await records()).toEqual([['a', 'one']]); + expect(await db.selectFrom('syncRepoRetry').selectAll().execute()).toEqual([]); + expect(await db.selectFrom('spaceWatch').select('lastError').execute()).toEqual([{ lastError: error }]); + } + ); + it('keeps a failure that is not an Error as its text on the repo', async () => { const s = await syncer(); await host.put(DJ, NOTE, 'a', note('one')); diff --git a/apps/web/src/lib/server/sync/engine.ts b/apps/web/src/lib/server/sync/engine.ts index 1c90519ab..b1d0d409c 100644 --- a/apps/web/src/lib/server/sync/engine.ts +++ b/apps/web/src/lib/server/sync/engine.ts @@ -6,10 +6,11 @@ import { COMMIT_MAC_TYPE, type Commit, type RecordPathParts, + readRepoStar, RepoCommit, SpaceMacError, - verifyCommit, - verifyRepoStarFull + type VerifiedRecord, + verifyCommit } from '@atproto/space'; import PQueue from 'p-queue'; import { z } from 'zod'; @@ -72,7 +73,8 @@ export type SyncStatus = { lastSyncedAt: string | null; lastError: string | null; registrationExpiresAt: string | null; - repos: { did: string; rev: string; lastSyncedAt: string; lastError: string | null }[]; + /** A repo that has failed since before it ever synced has no rev or sync time. */ + repos: { did: string; rev: string | null; lastSyncedAt: string | null; lastError: string | null }[]; }; /** @@ -114,6 +116,17 @@ function authoritySaysGone(error: XrpcResponseError): boolean { const failsWholeSpace = (cause: unknown) => cause instanceof XrpcResponseError && cause.nsid === 'com.atproto.space.getSpaceCredential'; +const REPO_UNAVAILABLE = new Set(['RepoTakendown', 'RepoSuspended', 'RepoDeactivated']); + +/** + * Whether a writer's repo host won't serve the repo because the account is taken down, suspended, or + * deactivated. A full download fails the same way, and the pass carries on without it: the repo waits out its + * backoff, so it's picked up again once the account is back. The same errors from getSpaceCredential mean the + * authority's account is, which suspends the whole space. + */ +const isRepoUnavailable = (cause: unknown) => + cause instanceof XrpcResponseError && REPO_UNAVAILABLE.has(cause.error) && !failsWholeSpace(cause); + /** How long a repo waits after its `attempts`th failure in a row: 1 minute, doubling up to an hour. */ const retryDelayMs = (attempts: number) => Math.min(60_000 * 2 ** (attempts - 1), 3_600_000); @@ -253,7 +266,7 @@ export class SpaceSyncer { for (const result of results) { if (result.status === 'fulfilled') changed += Number(result.value); else if (failsWholeSpace(result.reason)) throw result.reason; - else failures.push(result.reason); + else if (!isRepoUnavailable(result.reason)) failures.push(result.reason); } }; @@ -409,7 +422,7 @@ export class SpaceSyncer { return; } catch (error) { // A full download would fail the same way: readVerified retries a MAC failure with a fresh KEM key. - if (isCredentialRejected(error) || isMacFailure(error)) throw error; + if (isCredentialRejected(error) || isMacFailure(error) || isRepoUnavailable(error)) throw error; logger.info('incremental sync failed; recovering full repo', { err: error, space, repoDid }); } } @@ -423,6 +436,9 @@ export class SpaceSyncer { if (!failsWholeSpace(error)) await this.recordFailure(space, repoDid, message); + if (isRepoUnavailable(error)) + logger.info('skipping a repo its host will not serve', { err: error, space, repoDid }); + if (local) { await db .updateTable('syncedRepo') @@ -566,8 +582,21 @@ export class SpaceSyncer { if (!response.body) throw new Error('Empty repo response'); - // A STAR archive: the commit (checked against the MAC), then every record, which must fold into its data. - const verified = await verifyRepoStarFull(response.body, { space, repo: repoDid, ...macParams() }); + // A STAR archive: the commit, then every record, which must fold into its data. verifyRepoStar would check the + // commit too, but reports a MAC that doesn't verify as the same RepoVerificationError as an archive that + // doesn't parse, and only the first is worth refreshing the KEM key for. + const archive = await readRepoStar(response.body); + const records: VerifiedRecord[] = []; + + try { + if (!verifyCommit(archive.commit, { space, repo: repoDid, ...macParams() })) { + throw new SpaceMacError('Commit does not match its MAC'); + } + + for await (const record of archive.records) records.push(record); + } finally { + await archive[Symbol.asyncDispose](); + } const existing = await this.deps.db .selectFrom('spaceRecord') @@ -580,7 +609,7 @@ export class SpaceSyncer { const changes: SyncedChange[] = []; const known = new Map(existing.map((row) => [`${row.collection}/${row.rkey}`, row.cid])); - for (const record of verified.records) { + for (const record of records) { const path = `${record.collection}/${record.rkey}`; present.add(path); const cid = record.cid.toString(); @@ -611,7 +640,7 @@ export class SpaceSyncer { } } - await this.apply(space, repoDid, pds, verified.commit, RepoCommit.fromRecords(verified.records), changes); + await this.apply(space, repoDid, pds, archive.commit, RepoCommit.fromRecords(records), changes); } private async apply( @@ -811,11 +840,23 @@ export class SpaceSyncer { async status(): Promise { const watches = await this.deps.db.selectFrom('spaceWatch').selectAll().orderBy('createdAt').execute(); - const repos = await this.deps.db + const synced = await this.deps.db .selectFrom('syncedRepo') .select(['spaceUri', 'repoDid', 'rev', 'lastSyncedAt', 'lastError']) .execute(); + // A repo that never synced has no syncedRepo row, only its retry, which is all that shows why. + const unsynced = await this.deps.db + .selectFrom('syncRepoRetry as retry') + .leftJoin('syncedRepo as synced', (join) => + join.onRef('synced.spaceUri', '=', 'retry.spaceUri').onRef('synced.repoDid', '=', 'retry.repoDid') + ) + .where('synced.repoDid', 'is', null) + .select(['retry.spaceUri', 'retry.repoDid', 'retry.lastError']) + .execute(); + + const repos = [...synced, ...unsynced.map((repo) => ({ ...repo, rev: null, lastSyncedAt: null }))]; + return watches.map((watch) => ({ space: watch.spaceUri, type: watch.spaceType, @@ -825,6 +866,7 @@ export class SpaceSyncer { lastError: watch.lastError, registrationExpiresAt: watch.registrationExpiresAt, repos: repos + .values() .filter((repo) => repo.spaceUri === watch.spaceUri) .map((repo) => ({ did: repo.repoDid, @@ -832,6 +874,7 @@ export class SpaceSyncer { lastSyncedAt: repo.lastSyncedAt, lastError: repo.lastError })) + .toArray() })); } } diff --git a/apps/web/src/routes/admin/system/+page.svelte b/apps/web/src/routes/admin/system/+page.svelte index 8ad1cbfb9..2414fd9d6 100644 --- a/apps/web/src/routes/admin/system/+page.svelte +++ b/apps/web/src/routes/admin/system/+page.svelte @@ -100,7 +100,7 @@ {#if space.lastError}

{space.lastError}

{/if}