@getcirrus/pds 0.10.3 → 0.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -105,6 +105,18 @@ declare class SqliteRepoStorage extends ReadableBlockstore implements RepoStorag
105
105
  * Set the email address.
106
106
  */
107
107
  setEmail(email: string): void;
108
+ /**
109
+ * Get all cached collection names.
110
+ */
111
+ getCollections(): string[];
112
+ /**
113
+ * Add a collection name to the cache (no-op if already present).
114
+ */
115
+ addCollection(collection: string): void;
116
+ /**
117
+ * Check if the collections cache has been populated.
118
+ */
119
+ hasCollections(): boolean;
108
120
  /**
109
121
  * Add a blob reference from a record.
110
122
  */
@@ -476,9 +488,9 @@ declare class AccountDurableObject extends DurableObject<PDSEnv> {
476
488
  rev: string;
477
489
  }>;
478
490
  /**
479
- * RPC method: Export repo as CAR
491
+ * Handle streaming getRepo via fetch (not RPC, to enable streaming response).
480
492
  */
481
- rpcGetRepoCar(): Promise<Uint8Array>;
493
+ private handleGetRepo;
482
494
  /**
483
495
  * RPC method: Get specific blocks by CID as CAR file
484
496
  * Used for partial sync and migration.
@@ -703,8 +715,9 @@ declare class AccountDurableObject extends DurableObject<PDSEnv> {
703
715
  /** Consume a WebAuthn challenge (single-use) */
704
716
  rpcConsumeWebAuthnChallenge(challenge: string): Promise<boolean>;
705
717
  /**
706
- * HTTP fetch handler for WebSocket upgrades.
707
- * This is used instead of RPC to avoid WebSocket serialization errors.
718
+ * HTTP fetch handler for WebSocket upgrades and streaming responses.
719
+ * Used instead of RPC when the response can't be serialized (WebSocket)
720
+ * or when streaming is needed to avoid buffering large payloads (getRepo).
708
721
  */
709
722
  fetch(request: Request): Promise<Response>;
710
723
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage.ts","../src/oauth-storage.ts","../src/blobs.ts","../src/types.ts","../src/account-do.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage.ts","../src/oauth-storage.ts","../src/blobs.ts","../src/types.ts","../src/account-do.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;cAUa,iBAAA,SACJ,kBAAA,YACG;EAFC,QAAA,GAAA;EAIa,WAAA,CAAA,GAAA,EAAA,UAAA;EAwGA;;;;EAiCR,UAAA,CAAA,aAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAQG;;;EAcL,OAAA,CAAA,CAAA,EAvDE,OAuDF,CAvDU,GAuDV,GAAA,IAAA,CAAA;EAAM;;;EAU8C,MAAA,CAAA,CAAA,EApDnD,OAoDmD,CAAA,MAAA,GAAA,IAAA,CAAA;EAArC;;;EAmB4B,MAAA,CAAA,CAAA,EA7D1C,OA6D0C,CAAA,MAAA,CAAA;EAYpC;;;EAoBmB,OAAA,CAAA,CAAA,EAnFxB,OAmFwB,CAAA,MAAA,CAAA;EAWf;;;EA6CT,QAAA,CAAA,GAAA,EAnIG,GAmIH,CAAA,EAnIS,OAmIT,CAnIiB,UAmIjB,GAAA,IAAA,CAAA;EAUI;;;EAoCF,GAAA,CAAA,GAAA,EAnKJ,GAmKI,CAAA,EAnKE,OAmKF,CAAA,OAAA,CAAA;EAUe;;;EA4MtB,SAAA,CAAA,IAAA,EA/WU,GA+WV,EAAA,CAAA,EA/WkB,OA+WlB,CAAA;IA8BI,MAAA,EA7YgC,QA6YhC;IAzjBR,OAAA,EA4K2D,GA5K3D,EAAA;EACG,CAAA,CAAA;EAAW;;;gBA8LF,YAAY,0BAA0B;EC5L9C;;;EAuG0C,OAAA,CAAA,MAAA,EDiGhC,QCjGgC,EAAA,GAAA,EAAA,MAAA,CAAA,EDiGR,OCjGQ,CAAA,IAAA,CAAA;EAgBb;;;EAsClB,UAAA,CAAA,GAAA,ED+DD,GC/DC,EAAA,GAAA,EAAA,MAAA,CAAA,ED+DkB,OC/DlB,CAAA,IAAA,CAAA;EAAY;;;EAiDoB,WAAA,CAAA,MAAA,EDyB7B,UCzB6B,CAAA,EDyBhB,OCzBgB,CAAA,IAAA,CAAA;EAAR;;;EA4CF,WAAA,CAAA,CAAA,EDgBxB,OChBwB,CAAA,MAAA,CAAA;EAAiB;;;EAwCtB,OAAA,CAAA,CAAA,EDdvB,OCcuB,CAAA,IAAA,CAAA;EAAU;;;EAuCb,WAAA,CAAA,CAAA,ED3ChB,OC2CgB,CAAA,MAAA,CAAA;EAWG;;;oBD5ChB;;;AEhTzB;0CFkU+C;;;AGjT/C;EAiBiB,SAAM,CAAA,CAAA,EHwSH,OGxSG,CAAA,OAAA,CAAA;EAkBU;;;EAoBhB,SAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EH4QkB,OG5QlB,CAAA,IAAA,CAAA;EAAY;;;;ECnChB;;;EAU8B,QAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAkElB;;;EAmDS,cAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EAAR;;;EAgBH,aAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAaM;;;EAQD,cAAA,CAAA,CAAA,EAAA,OAAA;EAOF;;;EAoEf,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EADP;;;EA2LA,cAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA;EA0FM;;;EA0KiB,iBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAgEkB;;;EA+BzC,iBAAA,CAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAkC2B;;;EA2EoC,cAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAR;;;EAiJrB,kBAAA,CAAA,CAAA,EAAA,MAAA;EAAkB;;;EAqCnC,kBAAA,CAAA,CAAA,EAAA,MAAA;EASd;;;EAkBqB,gBAAA,CAAA,KAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA;IASsB,KAAA,EJ7pBrC,KI6pBqC,CAAA;MAQ5B,GAAA,EAAA,MAAA;MAQgB,SAAA,EAAA,MAAA;IAQf,CAAA,CAAA;IAQM,MAAA,CAAA,EAAA,MAAA;EAQE,CAAA;EAYN;;;EA4BO,iBAAA,CAAA,CAAA,EAAA,IAAA;EAYvB;;;EA8CoC,WAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EJrvBhC,UIqvBgC,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAkDpB;;;EA+BrB,UAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA;IAAO,YAAA,EAAA,MAQqC;IAA5C,SAAA,EJ3zBS,UI2zBT;IAMoC,OAAA,EAAA,MAAA;IAAO,IAAA,EAAA,MAAA,GAAA,IAAA;IAQ3C,SAAA,EAAA,MAAA;IAAO,UAAA,EAAA,MAAA,GAQqC,IAAA;EAA5C,CAAA,GAAA,IAAA;EAAO;;;EAoB6B,YAAA,CAAA,CAAA,EJv0BvB,KIu0BuB,CAAA;IAAO,YAAA,EAAA,MAQC;IAC5C,IAAA,EAAA,MAAA,GAAA,IAAA;IAAO,SAAA,EAAA,MAAA;IAQP,UAAA,EAAA,MAAA,GAAA,IAAA;EAAO,CAAA,CAAA;EASP;;;EAcqC,aAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAMG;;;EAuB/B,oBAAA,CAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAF+B;;;EA0BG,WAAA,CAAA,CAAA,EAAA,OAAA;EAS3C;;;EAyBA,gBAAA,CAAA,KAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAMgD;;;EAgBH,mBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA;IAAR,SAAA,EAAA,MAAA;IAr/CC,IAAA,EAAA,MAAA,GAAA,IAAA;EAAa,CAAA,GAAA,IAAA;;;;EC8BjD,oBAAsC,CAAA,CAAA,EAAA,IAAA;;;;;;;;;;cJ3D/B,kBAAA,YAA8B;;mBACjB;EDLb;;;EA4GK,UAAA,CAAA,CAAA,EAAA,IAAA;EAaD;;;EA4BI,OAAA,CAAA,CAAA,EAAA,IAAA;EAAc,YAAA,CAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EC1CK,YD0CL,CAAA,EC1CoB,OD0CpB,CAAA,IAAA,CAAA;EAAR,WAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EC1BO,OD0BP,CC1Be,YD0Bf,GAAA,IAAA,CAAA;EAcX,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,ECVqB,ODUrB,CAAA,IAAA,CAAA;EAAM,UAAA,CAAA,IAAA,ECFE,SDEF,CAAA,ECFc,ODEd,CAAA,IAAA,CAAA;EAUC,gBAAA,CAAA,WAAA,EAAA,MAAA,CAAA,ECKuB,ODLvB,CCK+B,SDL/B,GAAA,IAAA,CAAA;EAA0B,iBAAA,CAAA,YAAA,EAAA,MAAA,CAAA,ECqCD,ODrCC,CCqCO,SDrCP,GAAA,IAAA,CAAA;EAAmB,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,ECkE3B,ODlE2B,CAAA,IAAA,CAAA;EAArC,eAAA,CAAA,GAAA,EAAA,MAAA,CAAA,ECyEM,ODzEN,CAAA,IAAA,CAAA;EAmBV,UAAA,CAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EC8DyB,cD9DzB,CAAA,EC8D0C,OD9D1C,CAAA,IAAA,CAAA;EAAY,SAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EC4EG,OD5EH,CC4EW,cD5EX,GAAA,IAAA,CAAA;EAA0B,OAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,ECsGlB,ODtGkB,CAAA,ECsGR,ODtGQ,CAAA,IAAA,CAAA;EAYpC,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,ECqGY,ODrGZ,CCqGoB,ODrGpB,GAAA,IAAA,CAAA;EAAwB,SAAA,CAAA,UAAA,EAAA,MAAA,CAAA,ECiIT,ODjIS,CAAA,IAAA,CAAA;EAoBxB,iBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,ECwHkB,ODxHlB,CAAA,OAAA,CAAA;EAAmB;;;EA8CpB,OAAA,CAAA,CAAA,EAAA,IAAA;EAUJ;;;EAsC6B,qBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAQ3B;;;;EAsNP,wBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;;;UEhiBI,OAAA;;;;;;;;;;;;;;;;;;AFIjB;;;;;;;;;;;;AA6KuB,KGhKX,YAAA,GHgKW,MAAA,GAAA,IAAA,GAAA,MAAA,GAAA,MAAA,GAAA,KAAA,GAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,IAAA,GAAA,KAAA,GAAA,IAAA;;;;;AAmBU,UGlKhB,MAAA,CHkKgB;EAA0B;EAYpC,GAAA,EAAA,MAAA;EAAwB;EAoBxB,MAAA,EAAA,MAAA;EAAmB;EAWf,YAAA,EAAA,MAAA;EAAa;EAmClB,UAAA,EAAA,MAAA;EAUJ;EAUI,WAAA,EAAA,MAAA;EAUG;EAkBsB,kBAAA,EAAA,MAAA;EAQ3B;EAUe,UAAA,EAAA,MAAA;EAuItB;EAkDA,aAAA,EAAA,MAAA;EAmBA;EA8BI,OAAA,EG1gBP,sBH0gBO,CG1gBgB,oBH0gBhB,CAAA;EAzjBR;EACG,KAAA,CAAA,EGgDH,QHhDG;EAAW;;;;ECEV;;;;;;;;;;;;;EA2O4B,aAAA,CAAA,EE3KxB,YF2KwB;;;;;;;AD/OzC;;;;;;AA6IkB,cI5GL,oBAAA,SAA6B,aJ4GxB,CI5GsC,MJ4GtC,CAAA,CAAA;EAQG,QAAA,OAAA;EAAc,QAAA,YAAA;EAAR,QAAA,IAAA;EAcX,QAAA,OAAA;EAAM,QAAA,SAAA;EAUC,QAAA,SAAA;EAA0B,QAAA,kBAAA;EAAmB,QAAA,eAAA;EAArC,WAAA,CAAA,GAAA,EIlIb,kBJkIa,EAAA,GAAA,EIlIY,MJkIZ;EAmBV;;;EAYE,QAAA,wBAAA;EAAwB;;;EA+BpB,QAAA,UAAA;EAAa;;;;EAiEf,KAAA,CAAA,CAAA,EI/LA,OJ+LA,CAAA,IAAA,CAAA;EAkBsB;;;EAyJlC,QAAA,qBAAA;EAkDA;;;EAxgBJ,UAAA,CAAA,CAAA,EIuJY,OJvJZ,CIuJoB,iBJvJpB,CAAA;EACG;;;qBI8Jc,QAAQ;;AH5JlC;;EAuGwC,OAAA,CAAA,CAAA,EG6DtB,OH7DsB,CG6Dd,IH7Dc,CAAA;EAAe;;;EA8ClB,YAAA,CAAA,CAAA,EGuBd,OHvBc,CAAA,IAAA,CAAA;EAQb;;;EAiBsB,UAAA,CAAA,CAAA,EGWzB,OHXyB,CGWjB,gBHXiB,CAAA;EAgCU;;;EAoCnB,OAAA,CAAA,IAAA,EGjDhB,IHiDgB,CAAA,EGjDT,OHiDS,CAAA,IAAA,CAAA;EAQS;;;EAcV,eAAA,CAAA,CAAA,EGhEV,OHgEU,CAAA;IA0BK,GAAA,EAAA,MAAA;IAAU,WAAA,EAAA,MAAA,EAAA;IAWR,GAAA,EAAA,MAAA;EAAR,CAAA,CAAA;EA4BG;;;EAzUiB,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EGwOnD,OHxOmD,CAAA;;YG0O7C,GAAA,CAAI;;EFlPG;;;;ICiBL,KAAA,EAAA,MAAY;IAiBP,MAAM,CAAA,EAAA,MAAA;IAkBU,OAAA,CAAA,EAAA,OAAA;EAAvB,CAAA,CAAA,EC+NN,OD/NM,CAAA;IAED,OAAA,EC8NE,KD9NF,CAAA;MAkBQ,GAAA,EAAA,MAAA;MAAY,GAAA,EAAA,MAAA;;;;ECnChB,CAAA,CAAA;EAA2C;;;EA4E/B,eAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA6MrB,OA7MqB,CAAA;IA2CI,GAAA,EAAA,MAAA;IAAR,GAAA,EAAA,MAAA;IAQa,MAAA,EAAA;MAAR,GAAA,EAAA,MAAA;MAQA,GAAA,EAAA,MAAA;IAAR,CAAA;EAQK,CAAA,CAAA;EAaM;;;EAQD,eAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAsMxB,OAtMwB,CAAA;IAOF,MAAA,EAAA;MAkCZ,GAAA,EAAA,MAAA;MAFV,GAAA,EAAA,MAAA;IAoCO,CAAA;EADP,CAAA,GAAA,IAAA,CAAA;EA2CA;;;EA0OM,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EA1FN,OA0FM,CAAA;IAQC,GAAA,EAAA,MAAA;IAFP,GAAA,EAAA,MAAA;IAoKuB,MAAA,EAAA;MAgEkB,GAAA,EAAA,MAAA;MAAR,GAAA,EAAA,MAAA;IA+BzB,CAAA;IAAR,gBAAA,EAAA,MAAA;EAkC2B,CAAA,CAAA;EAAa;;;EA2Ee,cAAA,CAAA,MAAA,EAtXjD,KAsXiD,CAAA;IAyBhB,KAAA,EAAA,MAAA;IAAR,UAAA,EAAA,MAAA;IAwHG,IAAA,CAAA,EAAA,MAAA;IAAkB,KAAA,CAAA,EAAA,OAAA;EAAR,CAAA,CAAA,CAAA,EAjgB5C,OAigB4C,CAAA;IAoCzC,MAAA,EAAA;MACc,GAAA,EAAA,MAAA;MASd,GAAA,EAAA,MAAA;IAWuB,CAAA;IAAkB,OAAA,EAxjBrC,KAwjBqC,CAAA;MAOpB,KAAA,EAAA,MAAA;MASsB,GAAA,CAAA,EAAA,MAAA;MAQ5B,GAAA,CAAA,EAAA,MAAA;MAQgB,gBAAA,CAAA,EAAA,MAAA;IAQf,CAAA,CAAA;EAQM,CAAA,CAAA;EAQE;;;EAgCC,gBAAA,CAAA,CAAA,EA9eL,OA8eK,CAAA;IAQA,GAAA,EAAA,MAAA;IAYvB,IAAA,EAAA,MAAA;IADL,GAAA,EAAA,MAAA;EAawB,CAAA,CAAA;EAkCiB;;;EA0DP,QAAA,aAAA;EAuBlC;;;;EAc2C,YAAA,CAAA,IAAA,EAAA,MAOH,EAAA,CAAA,EAtlBP,OAslBO,CAtlBC,UAslBD,CAAA;EACxC;;;;;;EA4BoC,iBAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAplBpC,OAolBoC,CAplB5B,UAolB4B,CAAA;EAAO;;;;;EA0B3C,aAAA,CAAA,QAAA,EA5kB2B,UA4kB3B,CAAA,EA5kBwC,OA4kBxC,CAAA;IAAO,GAAA,EAAA,MAAA;IAQP,GAAA,EAAA,MAAA;IAMqC,GAAA,EAAA,MAAA;EAMG,CAAA,CAAA;EAY/B;;;EAS+B,aAAA,CAAA,KAAA,EA1iBhB,UA0iBgB,EAAA,QAAA,EAAA,MAAA,CAAA,EA1iBe,OA0iBf,CA1iBuB,OA0iBvB,CAAA;EAc1C;;;EAqBE,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EApjB+B,OAojB/B,CApjBuC,YAojBvC,GAAA,IAAA,CAAA;EAMqB;;;EAyB2B,QAAA,WAAA;EAMG;;;EAUd,QAAA,iBAAA;EAr/CC;;;;;AClBJ;;EAgDC,QAAA,gBAAA;EAA9B;;;;;;;;;;;;;;;iCD4+B6B,UAAU,QAAQ;;;;wBAoCjD,8BACc;;;;sBASd;;;;sBAWuB,kBAAkB;;;;uBAOpB;;;;;;6CASsB;;;;iBAQ5B;;;;;;iCAQgB;;;;kBAQf;;;;wBAQM;;;;0BAQE;;;;oBAYN;;;;qBAQC;;;;2BAYM;;;;2BAQA;;;;wDAW5B;WACK;;;;;;;;;;;uBAYmB;;;;;;;wCAkCiB;;;;;;oBAkDpB;;;;;;0BAQM;;;;;sCAAO,0BAAA,CAsBM,eACxC;;gCAQA,QARO,0BAAA,CAQqC,YAAA;;mCAMR;;sBAAO,0BAAA,CAOH,YACxC;;4CAQA,QARO,0BAAA,CAQqC,SAAA;;8CAQ5C,QARO,0BAAA,CAQqC,SAAA;;uCAMJ;;mCAMJ;;4CAAO,0BAAA,CAQC,iBAC5C;;kCAQA,QARO,0BAAA,CAQqC,cAAA;;uCAArC,0BAAA,CAQiC,UACxC;;iCAQA,QARO,0BAAA,CAQqC,OAAA;;oCAMP;;uCAMG;;kDAY/B,6CAGT;;uCAMwC;;eAE/B;;;;;;;qBAWa,QACxB;;;;;;;0CAY6C;;kEAS3C;;oBAMqB;;2FAWrB;;yCAQA;;;;;+CAMgD;;kDAMG;;;;;;iBAUxB,UAAU,QAAQ;;;;cCv9C3C,KAAG;YAAwB;GAAM,WAAA,CAAA,WAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DurableObject, env, waitUntil } from "cloudflare:workers";
2
- import { BlockMap, ReadableBlockstore, Repo, WriteOpAction, blocksToCarFile, getRecords, readCarWithRoot } from "@atproto/repo";
2
+ import { BlockMap, ReadableBlockstore, Repo, WriteOpAction, blocksToCarFile, getRecords, readCarWithRoot, writeCarStream } from "@atproto/repo";
3
3
  import { Secp256k1Keypair, randomStr, verifySignature } from "@atproto/crypto";
4
4
  import { CID, asCid, isBlobRef } from "@atproto/lex-data";
5
5
  import { now } from "@atcute/tid";
@@ -172,6 +172,11 @@ var SqliteRepoStorage = class extends ReadableBlockstore {
172
172
  createdAt TEXT NOT NULL DEFAULT (datetime('now'))
173
173
  );
174
174
 
175
+ -- Collection name cache (for describeRepo)
176
+ CREATE TABLE IF NOT EXISTS collections (
177
+ collection TEXT PRIMARY KEY
178
+ );
179
+
175
180
  -- Passkey credentials (WebAuthn)
176
181
  CREATE TABLE IF NOT EXISTS passkeys (
177
182
  credential_id TEXT PRIMARY KEY,
@@ -350,6 +355,24 @@ var SqliteRepoStorage = class extends ReadableBlockstore {
350
355
  this.sql.exec("UPDATE repo_state SET email = ? WHERE id = 1", email);
351
356
  }
352
357
  /**
358
+ * Get all cached collection names.
359
+ */
360
+ getCollections() {
361
+ return this.sql.exec("SELECT collection FROM collections ORDER BY collection").toArray().map((row) => row.collection);
362
+ }
363
+ /**
364
+ * Add a collection name to the cache (no-op if already present).
365
+ */
366
+ addCollection(collection) {
367
+ this.sql.exec("INSERT OR IGNORE INTO collections (collection) VALUES (?)", collection);
368
+ }
369
+ /**
370
+ * Check if the collections cache has been populated.
371
+ */
372
+ hasCollections() {
373
+ return this.sql.exec("SELECT 1 FROM collections LIMIT 1").toArray().length > 0;
374
+ }
375
+ /**
353
376
  * Add a blob reference from a record.
354
377
  */
355
378
  addRecordBlob(recordUri, blobCid) {
@@ -1033,15 +1056,17 @@ var AccountDurableObject = class extends DurableObject {
1033
1056
  */
1034
1057
  async rpcDescribeRepo() {
1035
1058
  const repo = await this.getRepo();
1036
- const collections = [];
1037
- const seenCollections = /* @__PURE__ */ new Set();
1038
- for await (const record of repo.walkRecords()) if (!seenCollections.has(record.collection)) {
1039
- seenCollections.add(record.collection);
1040
- collections.push(record.collection);
1059
+ const storage = await this.getStorage();
1060
+ if (!storage.hasCollections() && await storage.getRoot()) {
1061
+ const seen = /* @__PURE__ */ new Set();
1062
+ for await (const record of repo.walkRecords()) if (!seen.has(record.collection)) {
1063
+ seen.add(record.collection);
1064
+ storage.addCollection(record.collection);
1065
+ }
1041
1066
  }
1042
1067
  return {
1043
1068
  did: repo.did,
1044
- collections,
1069
+ collections: storage.getCollections(),
1045
1070
  cid: repo.cid.toString()
1046
1071
  };
1047
1072
  }
@@ -1106,6 +1131,7 @@ var AccountDurableObject = class extends DurableObject {
1106
1131
  const dataKey = `${collection}/${actualRkey}`;
1107
1132
  const recordCid = await this.repo.data.get(dataKey);
1108
1133
  if (!recordCid) throw new Error(`Failed to create record: ${collection}/${actualRkey}`);
1134
+ this.storage.addCollection(collection);
1109
1135
  if (this.sequencer) {
1110
1136
  const newBlocks = new BlockMap();
1111
1137
  const rows = this.ctx.storage.sql.exec("SELECT cid, bytes FROM blocks WHERE rev = ?", this.repo.commit.rev).toArray();
@@ -1203,6 +1229,7 @@ var AccountDurableObject = class extends DurableObject {
1203
1229
  const dataKey = `${collection}/${rkey}`;
1204
1230
  const recordCid = await this.repo.data.get(dataKey);
1205
1231
  if (!recordCid) throw new Error(`Failed to put record: ${collection}/${rkey}`);
1232
+ this.storage.addCollection(collection);
1206
1233
  if (this.sequencer) {
1207
1234
  const newBlocks = new BlockMap();
1208
1235
  const rows = this.ctx.storage.sql.exec("SELECT cid, bytes FROM blocks WHERE rev = ?", this.repo.commit.rev).toArray();
@@ -1292,6 +1319,7 @@ var AccountDurableObject = class extends DurableObject {
1292
1319
  } else throw new Error(`Unknown write type: ${write.$type}`);
1293
1320
  const prevRev = repo.commit.rev;
1294
1321
  this.repo = await repo.applyWrites(ops, keypair);
1322
+ for (const op of ops) if (op.action !== WriteOpAction.Delete) this.storage.addCollection(op.collection);
1295
1323
  const finalResults = [];
1296
1324
  const opsWithCids = [];
1297
1325
  for (let i = 0; i < results.length; i++) {
@@ -1354,19 +1382,28 @@ var AccountDurableObject = class extends DurableObject {
1354
1382
  };
1355
1383
  }
1356
1384
  /**
1357
- * RPC method: Export repo as CAR
1385
+ * Handle streaming getRepo via fetch (not RPC, to enable streaming response).
1358
1386
  */
1359
- async rpcGetRepoCar() {
1387
+ async handleGetRepo() {
1360
1388
  const root = await (await this.getStorage()).getRoot();
1361
- if (!root) throw new Error("No repository root found");
1362
- const rows = this.ctx.storage.sql.exec("SELECT cid, bytes FROM blocks").toArray();
1363
- const blocks = new BlockMap();
1364
- for (const row of rows) {
1365
- const cid = CID.parse(row.cid);
1366
- const bytes = new Uint8Array(row.bytes);
1367
- blocks.set(cid, bytes);
1389
+ if (!root) return Response.json({
1390
+ error: "RepoNotFound",
1391
+ message: "No repository root found"
1392
+ }, { status: 404 });
1393
+ const cursor = this.ctx.storage.sql.exec("SELECT cid, bytes FROM blocks");
1394
+ async function* blocks() {
1395
+ for (const row of cursor) yield {
1396
+ cid: CID.parse(row.cid),
1397
+ bytes: new Uint8Array(row.bytes)
1398
+ };
1368
1399
  }
1369
- return blocksToCarFile(root, blocks);
1400
+ const carIter = writeCarStream(root, blocks())[Symbol.asyncIterator]();
1401
+ const stream = new ReadableStream({ async pull(controller) {
1402
+ const { value, done } = await carIter.next();
1403
+ if (done) controller.close();
1404
+ else controller.enqueue(value);
1405
+ } });
1406
+ return new Response(stream, { headers: { "Content-Type": "application/vnd.ipld.car" } });
1370
1407
  }
1371
1408
  /**
1372
1409
  * RPC method: Get specific blocks by CID as CAR file
@@ -1434,7 +1471,12 @@ var AccountDurableObject = class extends DurableObject {
1434
1471
  throw new Error(`DID mismatch: CAR file contains DID ${this.repo.did}, but expected ${this.env.DID}`);
1435
1472
  }
1436
1473
  this.repoInitialized = true;
1474
+ const seenCollections = /* @__PURE__ */ new Set();
1437
1475
  for await (const record of this.repo.walkRecords()) {
1476
+ if (!seenCollections.has(record.collection)) {
1477
+ seenCollections.add(record.collection);
1478
+ this.storage.addCollection(record.collection);
1479
+ }
1438
1480
  const blobCids = extractBlobCids(record.record);
1439
1481
  if (blobCids.length > 0) {
1440
1482
  const uri = `at://${this.repo.did}/${record.collection}/${record.rkey}`;
@@ -1827,11 +1869,14 @@ var AccountDurableObject = class extends DurableObject {
1827
1869
  return (await this.getOAuthStorage()).consumeWebAuthnChallenge(challenge);
1828
1870
  }
1829
1871
  /**
1830
- * HTTP fetch handler for WebSocket upgrades.
1831
- * This is used instead of RPC to avoid WebSocket serialization errors.
1872
+ * HTTP fetch handler for WebSocket upgrades and streaming responses.
1873
+ * Used instead of RPC when the response can't be serialized (WebSocket)
1874
+ * or when streaming is needed to avoid buffering large payloads (getRepo).
1832
1875
  */
1833
1876
  async fetch(request) {
1834
- if (new URL(request.url).pathname === "/xrpc/com.atproto.sync.subscribeRepos") return this.handleFirehoseUpgrade(request);
1877
+ const url = new URL(request.url);
1878
+ if (url.pathname === "/xrpc/com.atproto.sync.subscribeRepos") return this.handleFirehoseUpgrade(request);
1879
+ if (url.pathname === "/xrpc/com.atproto.sync.getRepo") return this.handleGetRepo();
1835
1880
  return new Response("Method not allowed", { status: 405 });
1836
1881
  }
1837
1882
  };
@@ -2759,14 +2804,7 @@ async function getRepo(c, accountDO) {
2759
2804
  error: "RepoNotFound",
2760
2805
  message: `Repository not found for DID: ${did}`
2761
2806
  }, 404);
2762
- const carBytes = await accountDO.rpcGetRepoCar();
2763
- return new Response(carBytes, {
2764
- status: 200,
2765
- headers: {
2766
- "Content-Type": "application/vnd.ipld.car",
2767
- "Content-Length": carBytes.length.toString()
2768
- }
2769
- });
2807
+ return accountDO.fetch(new Request("https://do/xrpc/com.atproto.sync.getRepo"));
2770
2808
  }
2771
2809
  async function getRepoStatus(c, accountDO) {
2772
2810
  const did = c.req.query("did");
@@ -4177,7 +4215,7 @@ function renderPasskeyErrorPage(error, description) {
4177
4215
 
4178
4216
  //#endregion
4179
4217
  //#region package.json
4180
- var version = "0.10.3";
4218
+ var version = "0.10.5";
4181
4219
 
4182
4220
  //#endregion
4183
4221
  //#region src/index.ts
@@ -4260,12 +4298,12 @@ app.get("/xrpc/_health", async (c) => {
4260
4298
  await getAccountDO(c.env).rpcHealthCheck();
4261
4299
  return c.json({
4262
4300
  status: "ok",
4263
- version
4301
+ version: `cirrus ${version}`
4264
4302
  });
4265
4303
  } catch {
4266
4304
  return c.json({
4267
4305
  status: "unhealthy",
4268
- version
4306
+ version: `cirrus ${version}`
4269
4307
  }, 503);
4270
4308
  }
4271
4309
  });