ddebf3fc5c
Instead of storing them in supabse we will store them in r2. I have already created `room-snapshots` and `room-snapshots-preview` buckets on cloudflare. We could also migrate all the data from supabase, but it seems we haven't done so for the rooms, so I also didn't look into doing it for snapshots. One slight drawback of moving to R2 is that it's harder to query data by parent slug. So answering questions like which room is the parent to the most snapshots is a bit harder to answer. Instead of just a simple query we'd need to do some custom logic to go through the bucket. Not sure if have ever needed this info though. ### Change Type <!-- ❗ Please select a 'Scope' label ❗️ --> - [ ] `sdk` — Changes the tldraw SDK - [x] `dotcom` — Changes the tldraw.com web app - [ ] `docs` — Changes to the documentation, examples, or templates. - [ ] `vs code` — Changes to the vscode plugin - [ ] `internal` — Does not affect user-facing stuff <!-- ❗ Please select a 'Type' label ❗️ --> - [ ] `bugfix` — Bug fix - [ ] `feature` — New feature - [x] `improvement` — Improving existing features - [ ] `chore` — Updating dependencies, other boring stuff - [ ] `galaxy brain` — Architectural changes - [ ] `tests` — Changes to any test code - [ ] `tools` — Changes to infrastructure, CI, internal scripts, debugging tools, etc. - [ ] `dunno` — I don't know ### Test Plan Existing snapshots: 1. Load an existing snapshot. It should still load correctly. The best way to do that is probably to generate a few of them in advance. New snapshots: 1. Create a new room. 2. Create a few snapshot links. 3. They should work. - [ ] Unit Tests - [ ] End to end tests ### Release Notes - Move storing of snapshots to cloudflare R2.
187 lines
5.2 KiB
TOML
187 lines
5.2 KiB
TOML
main = "src/lib/worker.ts"
|
|
compatibility_date = "2023-10-16"
|
|
|
|
[dev]
|
|
port = 8787
|
|
|
|
# these migrations are append-only. you can't change them. if you do need to change something, do so
|
|
# by creating new migrations
|
|
[[migrations]]
|
|
tag = "v1" # Should be unique for each entry
|
|
new_classes = ["TLDrawDurableObject"]
|
|
|
|
[[migrations]]
|
|
tag = "v2"
|
|
new_classes = ["TLProWorkspaceDurableObject"]
|
|
|
|
[[migrations]]
|
|
tag = "v3"
|
|
deleted_classes = ["TLProWorkspaceDurableObject"]
|
|
|
|
[[analytics_engine_datasets]]
|
|
binding = "MEASURE"
|
|
|
|
#################### Environment names ####################
|
|
# dev should never actually get deployed anywhere
|
|
[env.dev]
|
|
name = "dev-tldraw-multiplayer"
|
|
|
|
# we don't have a hard-coded name for preview. we instead have to generate it at build time and append it to this file.
|
|
|
|
# staging is the same as a preview on main:
|
|
[env.staging]
|
|
name = "main-tldraw-multiplayer"
|
|
|
|
# production gets the proper name
|
|
[env.production]
|
|
name = "tldraw-multiplayer"
|
|
|
|
#################### Durable objects ####################
|
|
# durable objects have the same configuration in all environments:
|
|
[[env.dev.durable_objects.bindings]]
|
|
name = "TLDR_DOC"
|
|
class_name = "TLDrawDurableObject"
|
|
|
|
[durable_objects]
|
|
bindings = [
|
|
{ name = "TLDR_DOC", class_name = "TLDrawDurableObject" },
|
|
]
|
|
|
|
[[env.preview.durable_objects.bindings]]
|
|
name = "TLDR_DOC"
|
|
class_name = "TLDrawDurableObject"
|
|
|
|
[[env.staging.durable_objects.bindings]]
|
|
name = "TLDR_DOC"
|
|
class_name = "TLDrawDurableObject"
|
|
|
|
[[env.production.durable_objects.bindings]]
|
|
name = "TLDR_DOC"
|
|
class_name = "TLDrawDurableObject"
|
|
|
|
#################### Analytics engine ####################
|
|
# durable objects have the same configuration in all environments:
|
|
[[env.dev.analytics_engine_datasets]]
|
|
binding = "MEASURE"
|
|
|
|
[[env.preview.analytics_engine_datasets]]
|
|
binding = "MEASURE"
|
|
|
|
[[env.staging.analytics_engine_datasets]]
|
|
binding = "MEASURE"
|
|
|
|
[[env.production.analytics_engine_datasets]]
|
|
binding = "MEASURE"
|
|
|
|
#################### Rooms R2 bucket ####################
|
|
# in dev, we write to the preview bucket and need a `preview_bucket_name`
|
|
[[env.dev.r2_buckets]]
|
|
binding = "ROOMS"
|
|
bucket_name = "rooms-preview"
|
|
preview_bucket_name = "rooms-preview"
|
|
|
|
# in preview and staging we write to the preview bucket
|
|
[[env.preview.r2_buckets]]
|
|
binding = "ROOMS"
|
|
bucket_name = "rooms-preview"
|
|
|
|
[[env.staging.r2_buckets]]
|
|
binding = "ROOMS"
|
|
bucket_name = "rooms-preview"
|
|
|
|
# in production, we write to the main bucket
|
|
[[env.production.r2_buckets]]
|
|
binding = "ROOMS"
|
|
bucket_name = "rooms"
|
|
|
|
#################### Rooms History bucket ####################
|
|
# in dev, we write to the preview bucket and need a `preview_bucket_name`
|
|
[[env.dev.r2_buckets]]
|
|
binding = "ROOMS_HISTORY_EPHEMERAL"
|
|
bucket_name = "rooms-history-ephemeral-preview"
|
|
preview_bucket_name = "rooms-history-ephemeral-preview"
|
|
|
|
# in preview and staging we write to the preview bucket
|
|
[[env.preview.r2_buckets]]
|
|
binding = "ROOMS_HISTORY_EPHEMERAL"
|
|
bucket_name = "rooms-history-ephemeral-preview"
|
|
|
|
[[env.staging.r2_buckets]]
|
|
binding = "ROOMS_HISTORY_EPHEMERAL"
|
|
bucket_name = "rooms-history-ephemeral-preview"
|
|
|
|
# in production, we write to the main bucket
|
|
[[env.production.r2_buckets]]
|
|
binding = "ROOMS_HISTORY_EPHEMERAL"
|
|
bucket_name = "rooms-history-ephemeral"
|
|
|
|
#################### Room snapshots bucket ####################
|
|
# in dev, we write to the preview bucket and need a `preview_bucket_name`
|
|
[[env.dev.r2_buckets]]
|
|
binding = "ROOM_SNAPSHOTS"
|
|
bucket_name = "room-snapshots-preview"
|
|
preview_bucket_name = "room-snapshots-preview"
|
|
|
|
# in preview and staging we write to the preview bucket
|
|
[[env.preview.r2_buckets]]
|
|
binding = "ROOM_SNAPSHOTS"
|
|
bucket_name = "room-snapshots-preview"
|
|
|
|
[[env.staging.r2_buckets]]
|
|
binding = "ROOM_SNAPSHOTS"
|
|
bucket_name = "room-snapshots-preview"
|
|
|
|
# in production, we write to the main bucket
|
|
[[env.production.r2_buckets]]
|
|
binding = "ROOM_SNAPSHOTS"
|
|
bucket_name = "room-snapshots"
|
|
|
|
#################### Room snapshots parent slug KV store ####################
|
|
[[env.dev.kv_namespaces]]
|
|
binding = "SNAPSHOT_SLUG_TO_PARENT_SLUG"
|
|
id = "5eaa50a2b87145e582661ea3344804b8"
|
|
|
|
[[env.preview.kv_namespaces]]
|
|
binding = "SNAPSHOT_SLUG_TO_PARENT_SLUG"
|
|
id = "5eaa50a2b87145e582661ea3344804b8"
|
|
|
|
[[env.staging.kv_namespaces]]
|
|
binding = "SNAPSHOT_SLUG_TO_PARENT_SLUG"
|
|
id = "5eaa50a2b87145e582661ea3344804b8"
|
|
|
|
[[env.production.kv_namespaces]]
|
|
binding = "SNAPSHOT_SLUG_TO_PARENT_SLUG"
|
|
id = "c6ce1f45447e4a44a00edb2a2077bc5c"
|
|
|
|
#################### Key value storage ####################
|
|
[[env.dev.kv_namespaces]]
|
|
binding = "SLUG_TO_READONLY_SLUG"
|
|
id = "847a6bded62045c6808dda6a275ef96c"
|
|
|
|
[[env.dev.kv_namespaces]]
|
|
binding = "READONLY_SLUG_TO_SLUG"
|
|
id = "0a83acab40374ccd918cc9d755741714"
|
|
|
|
[[env.preview.kv_namespaces]]
|
|
binding = "SLUG_TO_READONLY_SLUG"
|
|
id = "847a6bded62045c6808dda6a275ef96c"
|
|
|
|
[[env.preview.kv_namespaces]]
|
|
binding = "READONLY_SLUG_TO_SLUG"
|
|
id = "0a83acab40374ccd918cc9d755741714"
|
|
|
|
[[env.staging.kv_namespaces]]
|
|
binding = "SLUG_TO_READONLY_SLUG"
|
|
id = "847a6bded62045c6808dda6a275ef96c"
|
|
|
|
[[env.staging.kv_namespaces]]
|
|
binding = "READONLY_SLUG_TO_SLUG"
|
|
id = "0a83acab40374ccd918cc9d755741714"
|
|
|
|
[[env.production.kv_namespaces]]
|
|
binding = "SLUG_TO_READONLY_SLUG"
|
|
id = "2fb5fc7f7ca54a5a9dfae1b07a30a778"
|
|
|
|
[[env.production.kv_namespaces]]
|
|
binding = "READONLY_SLUG_TO_SLUG"
|
|
id = "96be6637b281412ab35b2544539d78e8"
|