Open History to see the last commit
1import * as Effect from "effect/Effect";
2import * as Layer from "effect/Layer";
3import { makeStorageBinding, storageHttpLayer } from "./StorageBinding.ts";
4import { WriteBucket, type WriteBucketClient } from "./WriteBucket.ts";
5
6export const makeWriteBucketClient = (
7 client: Effect.Success<ReturnType<Effect.Success<ReturnType<typeof makeStorageBinding>>>>,
8): WriteBucketClient => ({
9 put: client.put,
10 delete: client.delete,
11 deleteMany: client.deleteMany,
12 createMultipartUpload: client.createMultipartUpload,
13 uploadPart: client.uploadPart,
14 completeMultipartUpload: client.completeMultipartUpload,
15 abortMultipartUpload: client.abortMultipartUpload,
16 listMultipartUploads: client.listMultipartUploads,
17 listParts: client.listParts,
18 presignPut: (key, options) => client.presign(key, "PUT", options),
19});
20
21/**
22 * Use injected same-branch credentials, otherwise manage explicit read/write scopes.
23 *
24 * @layer
25 * @product Bucket
26 * @provides WriteBucket
27 */
28export const WriteBucketHttp = Layer.effect(
29 WriteBucket,
30 makeStorageBinding("storage:write").pipe(
31 Effect.map((bind) =>
32 Effect.fn(function* (...args: Parameters<typeof bind>) {
33 return makeWriteBucketClient(yield* bind(...args));
34 }),
35 ),
36 ),
37).pipe(Layer.provide(storageHttpLayer));