Examples

Basic put/get operations with Storage wrapper

import { Storage, createMemory } from "@anabranch/storage";

const connector = createMemory({ prefix: "files/" });
const storage = await Storage.connect(connector).run();

await storage.put("hello.txt", "Hello, World!").run();
const object = await storage.get("hello.txt").run();
console.log(await new Response(object.body).text());

Stream listing with concurrent processing

const connector = createMemory();
const storage = await Storage.connect(connector).run();

await storage.put("users/1.json", '{"name": "Alice"}');
await storage.put("users/2.json", '{"name": "Bob"}');

const { successes, errors } = await storage.list("users/")
  .withConcurrency(5)
  .map(async (entry) => await processEntry(entry))
  .tapErr((err) => console.error("Failed:", err))
  .partition();

Head request for metadata

import { Storage, createMemory } from "@anabranch/storage";

const connector = createMemory();
const storage = await Storage.connect(connector).run();

await storage.put("image.png", imageBytes, { contentType: "image/png" }).run();
const metadata = await storage.head("image.png").run();
console.log(metadata.contentType, metadata.size);

With retry and timeout

await storage.put("important.txt", data)
  .retry({ attempts: 3, delay: (attempt) => 100 * Math.pow(2, attempt) })
  .timeout(30_000)
  .run();