~ knotless Search/
↑↓ move↵ open⇧↵ all results

chadtmiller.com/pds.js

An atproto PDS in JavaScript, for Cloudflare Workers and Node

0
0
main
59 lines · 2.6 KB Raw History
# @pdsjs/blobs-fs

## 2.5.2

## 2.5.1

## 2.5.0

## 2.4.3

## 2.4.2

## 2.4.1

## 2.4.0

### Patch Changes

- 6b79149: Video-ready blob hosting. Blob uploads and downloads stream: `uploadBlob` hashes and stages bytes chunk by chunk instead of buffering the body, and `getBlob` answers byte ranges from a streamed read, so a 300 MB video fits through a Durable Object and seeks in a browser. The blob port gains optional `createWriter` and `getStream`; the fs, R2, S3 and Deno stores implement both, and each platform injects its native SHA-256. Drive stores a file as one blob of its own type when the store streams, takes large files across several requests through upload sessions, and offers a Link dialog with the blob ref any record can embed. The Worker serves public blobs through the edge cache, and a site's `/.blobs/` route serves ranges and now applies the same space-privacy filter as `getBlob`. A new `videos.mjs` example app is a gallery over the drive's videos. The node server accepts a `blobUploadLimit` option (`PDS_BLOB_UPLOAD_LIMIT` in the example), which Bluesky video posting needs.

## 2.3.0

## 2.2.0

### Minor Changes

- 224cb48: Scheduled backups, with a Backups page in the account UI.

  A backup is a snapshot in a new `BackupTargetPort` — a directory
  (`createFsBackupTarget`), an S3-compatible bucket (`createS3BackupTarget`), or
  on Cloudflare an R2 bucket bound as `BACKUPS`. Each snapshot holds the full
  signed repo CAR (the same bytes `com.atproto.sync.getRepo` serves) and a
  manifest, written last so an interrupted snapshot never counts; blobs are
  stored content-addressed at `blobs/<cid>` and shared across snapshots, so a
  run only uploads what the target doesn't already hold. Retention keeps the
  newest N snapshots and reaps blobs no kept manifest references.

  Scheduling rides the maintenance tick each runtime already had: the hourly
  interval on Node and Deno, and the Durable Object alarm on Cloudflare, which
  now fires hourly to match. Settings and run history live in the existing
  `metadata` table as one JSON document, read through new optional
  `getBackupState`/`setBackupState` methods on `ActorStoragePort`.

  The signing key stays out of snapshots unless opted in: entering a passphrase
  on the Backups page seals a copy under PBKDF2 → AES-256-GCM (`key.enc` in each
  snapshot), and the page warns when the key has rotated since it was sealed.
  The page also offers one-click manual runs, run history, schedule and
  retention settings, and a direct `.car` download that works even with no
  target configured.

## 2.1.0

## 2.0.0

## 1.0.2

## 1.0.1

## 1.0.0