© 2026 Hedgehog Software, LLC
storage.transaction(async (txn) => ... )
import { DurableObjectStorage, DurableObjectTransaction, } from "@cloudflare/workers-types"; import { Context, Deferred, Effect, Runtime } from "effect"; class DurableObjectStorageToken extends Context.Tag("DurableObjectStorage")< DurableObjectStorageToken, DurableObjectStorage >() {} class DurableObjectTransactionToken extends Context.Tag( "DurableObjectTransaction" )<DurableObjectTransactionToken, DurableObjectTransaction>() {} class StorageService extends Effect.Service<StorageService>()( "StorageService", { effect: Effect.gen(function* () { const storage = yield* DurableObjectStorageToken; const runtime = yield* Effect.runtime(); const run = Runtime.runPromise(runtime); return { transaction: <A, E>( closure: Effect.Effect<A, E, DurableObjectTransactionToken | never> ) => Effect.tryPromise(() => storage.transaction((ctx) => { const provided = closure.pipe( Effect.provideService(DurableObjectTransactionToken, ctx) ); return run(provided); }) ), }; }), dependencies: [], } ) {}