Last active
July 27, 2025 18:21
-
-
Save mootari/6f43558f0e2511b0bcd04a7ba2a243d3 to your computer and use it in GitHub Desktop.
Getting the SQLite DB path for a local R2 bucket
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env yarn -s tsx | |
import { createHash, createHmac } from "node:crypto"; | |
import { parseArgs } from "node:util"; | |
const uniqueKey = "miniflare-R2BucketObject"; | |
// Adapted from https://github.com/cloudflare/workers-sdk/blob/2df1d066c/packages/miniflare/src/plugins/shared/index.ts#L236-L249 | |
function durableObjectNamespaceIdFromName(name: string) { | |
const key = createHash("sha256").update(uniqueKey).digest(); | |
const nameHmac = createHmac("sha256", key).update(name).digest().subarray(0, 16); | |
const hmac = createHmac("sha256", key).update(nameHmac).digest().subarray(0, 16); | |
return Buffer.concat([nameHmac, hmac]).toString("hex"); | |
} | |
function dbFromName(name: string) { | |
return `.wrangler/state/v3/r2/${uniqueKey}/${durableObjectNamespaceIdFromName(name)}.sqlite`; | |
} | |
// Returns the path to a local R2 bucket's SQLite DB. | |
const {positionals: [name]} = parseArgs({allowPositionals: true}); | |
if(!name) { | |
console.error(`Usage: bucket-path BUCKET_NAME`); | |
process.exitCode = 1; | |
} | |
else process.stdout.write(dbFromName(name)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment