@furystack/s3-blob-store 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +76 -0
  2. package/esm/define-s3-blob-store.d.ts +36 -0
  3. package/esm/define-s3-blob-store.d.ts.map +1 -0
  4. package/esm/define-s3-blob-store.js +41 -0
  5. package/esm/define-s3-blob-store.js.map +1 -0
  6. package/esm/define-s3-blob-store.spec.d.ts +2 -0
  7. package/esm/define-s3-blob-store.spec.d.ts.map +1 -0
  8. package/esm/define-s3-blob-store.spec.js +86 -0
  9. package/esm/define-s3-blob-store.spec.js.map +1 -0
  10. package/esm/ensure-bucket-lifecycle.d.ts +24 -0
  11. package/esm/ensure-bucket-lifecycle.d.ts.map +1 -0
  12. package/esm/ensure-bucket-lifecycle.js +37 -0
  13. package/esm/ensure-bucket-lifecycle.js.map +1 -0
  14. package/esm/index.d.ts +3 -0
  15. package/esm/index.d.ts.map +1 -0
  16. package/esm/index.js +3 -0
  17. package/esm/index.js.map +1 -0
  18. package/esm/s3-blob-store.d.ts +82 -0
  19. package/esm/s3-blob-store.d.ts.map +1 -0
  20. package/esm/s3-blob-store.integration.spec.d.ts +2 -0
  21. package/esm/s3-blob-store.integration.spec.d.ts.map +1 -0
  22. package/esm/s3-blob-store.integration.spec.js +71 -0
  23. package/esm/s3-blob-store.integration.spec.js.map +1 -0
  24. package/esm/s3-blob-store.js +283 -0
  25. package/esm/s3-blob-store.js.map +1 -0
  26. package/esm/s3-blob-store.unit.spec.d.ts +2 -0
  27. package/esm/s3-blob-store.unit.spec.d.ts.map +1 -0
  28. package/esm/s3-blob-store.unit.spec.js +892 -0
  29. package/esm/s3-blob-store.unit.spec.js.map +1 -0
  30. package/esm/s3-stream-helpers.d.ts +35 -0
  31. package/esm/s3-stream-helpers.d.ts.map +1 -0
  32. package/esm/s3-stream-helpers.js +127 -0
  33. package/esm/s3-stream-helpers.js.map +1 -0
  34. package/package.json +55 -0
  35. package/src/define-s3-blob-store.spec.ts +24 -0
  36. package/src/define-s3-blob-store.ts +43 -0
  37. package/src/ensure-bucket-lifecycle.ts +47 -0
  38. package/src/index.ts +2 -0
  39. package/src/s3-blob-store.integration.spec.ts +78 -0
  40. package/src/s3-blob-store.ts +378 -0
  41. package/src/s3-blob-store.unit.spec.ts +539 -0
  42. package/src/s3-stream-helpers.ts +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-blob-store.unit.spec.js","sourceRoot":"","sources":["../src/s3-blob-store.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Readable } from 'node:stream';
2
+ import type { BlobPutInput } from '@furystack/blob-store';
3
+ /**
4
+ * Drains a Node-style readable stream into a single `Uint8Array`. Memory
5
+ * bound — only safe when the caller knows the payload fits in RAM.
6
+ */
7
+ export declare const collectNodeStream: (stream: NodeJS.ReadableStream) => Promise<Uint8Array>;
8
+ /**
9
+ * Adapts a {@link BlobPutInput} to a body shape the AWS SDK
10
+ * `PutObjectCommand` accepts. Web `ReadableStream` payloads are bridged to
11
+ * a Node `Readable` because the v3 SDK does not natively consume web
12
+ * streams.
13
+ */
14
+ export declare const toUploadBody: (input: BlobPutInput) => Readable | Buffer | Uint8Array;
15
+ /**
16
+ * Adapts an S3 `GetObjectCommand` body (web stream / Node stream / buffer)
17
+ * to a Web `ReadableStream<Uint8Array>` so callers see a uniform body type
18
+ * regardless of which transport the SDK chose at runtime.
19
+ *
20
+ * Throws {@link BlobStoreError} `code: 'io-error'` when the body shape is
21
+ * unrecognized.
22
+ */
23
+ export declare const bodyToWebStream: (body: unknown) => ReadableStream<Uint8Array>;
24
+ /**
25
+ * Drains an S3 response body into a single `Uint8Array`. Used by
26
+ * {@link S3BlobStore.bodyToBuffer} for callers that want the whole payload
27
+ * in memory.
28
+ */
29
+ export declare const bodyToBuffer: (body: unknown) => Promise<Uint8Array>;
30
+ /**
31
+ * Strips wrapping double-quotes from an S3 ETag header. The SDK preserves
32
+ * the wire format `"<hex>"`; consumers expect a bare hex string.
33
+ */
34
+ export declare const stripQuotes: (etag: string | undefined) => string | undefined;
35
+ //# sourceMappingURL=s3-stream-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-stream-helpers.d.ts","sourceRoot":"","sources":["../src/s3-stream-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,CAAC,cAAc,KAAG,OAAO,CAAC,UAAU,CAMzF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,KAAG,QAAQ,GAAG,MAAM,GAAG,UAsBtE,CAAA;AAiBD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,KAAG,cAAc,CAAC,UAAU,CAqBxE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,OAAO,KAAG,OAAO,CAAC,UAAU,CAyBpE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAG/D,CAAA"}
@@ -0,0 +1,127 @@
1
+ import { Readable } from 'node:stream';
2
+ import { BlobStoreError } from '@furystack/blob-store';
3
+ /**
4
+ * Drains a Node-style readable stream into a single `Uint8Array`. Memory
5
+ * bound — only safe when the caller knows the payload fits in RAM.
6
+ */
7
+ export const collectNodeStream = async (stream) => {
8
+ const chunks = [];
9
+ for await (const chunk of stream) {
10
+ chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
11
+ }
12
+ return new Uint8Array(Buffer.concat(chunks));
13
+ };
14
+ /**
15
+ * Adapts a {@link BlobPutInput} to a body shape the AWS SDK
16
+ * `PutObjectCommand` accepts. Web `ReadableStream` payloads are bridged to
17
+ * a Node `Readable` because the v3 SDK does not natively consume web
18
+ * streams.
19
+ */
20
+ export const toUploadBody = (input) => {
21
+ if (input instanceof Uint8Array)
22
+ return input;
23
+ if (typeof input.getReader === 'function') {
24
+ const reader = input.getReader();
25
+ return new Readable({
26
+ read() {
27
+ reader.read().then(({ done, value }) => {
28
+ if (done) {
29
+ this.push(null);
30
+ return;
31
+ }
32
+ this.push(Buffer.from(value));
33
+ }, (cause) => {
34
+ this.destroy(cause);
35
+ });
36
+ },
37
+ });
38
+ }
39
+ return Readable.from(input);
40
+ };
41
+ const drainNodeStreamToController = async (node, controller) => {
42
+ try {
43
+ for await (const chunk of node) {
44
+ const buf = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
45
+ controller.enqueue(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength));
46
+ }
47
+ controller.close();
48
+ }
49
+ catch (cause) {
50
+ controller.error(cause);
51
+ }
52
+ };
53
+ /**
54
+ * Adapts an S3 `GetObjectCommand` body (web stream / Node stream / buffer)
55
+ * to a Web `ReadableStream<Uint8Array>` so callers see a uniform body type
56
+ * regardless of which transport the SDK chose at runtime.
57
+ *
58
+ * Throws {@link BlobStoreError} `code: 'io-error'` when the body shape is
59
+ * unrecognized.
60
+ */
61
+ export const bodyToWebStream = (body) => {
62
+ if (body && typeof body === 'object' && 'getReader' in body) {
63
+ return body;
64
+ }
65
+ if (body && typeof body === 'object' && Symbol.asyncIterator in body) {
66
+ const node = body;
67
+ return new ReadableStream({
68
+ start(controller) {
69
+ void drainNodeStreamToController(node, controller);
70
+ },
71
+ });
72
+ }
73
+ if (body instanceof Uint8Array) {
74
+ return new ReadableStream({
75
+ start(controller) {
76
+ controller.enqueue(body);
77
+ controller.close();
78
+ },
79
+ });
80
+ }
81
+ throw new BlobStoreError('io-error', 'Unsupported S3 response body type');
82
+ };
83
+ /**
84
+ * Drains an S3 response body into a single `Uint8Array`. Used by
85
+ * {@link S3BlobStore.bodyToBuffer} for callers that want the whole payload
86
+ * in memory.
87
+ */
88
+ export const bodyToBuffer = async (body) => {
89
+ if (body instanceof Uint8Array)
90
+ return body;
91
+ if (Buffer.isBuffer(body))
92
+ return new Uint8Array(body);
93
+ if (typeof body === 'string')
94
+ return new TextEncoder().encode(body);
95
+ if (body && typeof body === 'object' && 'getReader' in body) {
96
+ const reader = body.getReader();
97
+ const chunks = [];
98
+ for (;;) {
99
+ const { done, value } = await reader.read();
100
+ if (done)
101
+ break;
102
+ chunks.push(value);
103
+ }
104
+ const total = chunks.reduce((acc, c) => acc + c.byteLength, 0);
105
+ const merged = new Uint8Array(total);
106
+ let offset = 0;
107
+ for (const chunk of chunks) {
108
+ merged.set(chunk, offset);
109
+ offset += chunk.byteLength;
110
+ }
111
+ return merged;
112
+ }
113
+ if (body && typeof body === 'object' && Symbol.asyncIterator in body) {
114
+ return collectNodeStream(body);
115
+ }
116
+ throw new BlobStoreError('io-error', 'Unsupported S3 response body type');
117
+ };
118
+ /**
119
+ * Strips wrapping double-quotes from an S3 ETag header. The SDK preserves
120
+ * the wire format `"<hex>"`; consumers expect a bare hex string.
121
+ */
122
+ export const stripQuotes = (etag) => {
123
+ if (etag === undefined)
124
+ return undefined;
125
+ return etag.startsWith('"') && etag.endsWith('"') ? etag.slice(1, -1) : etag;
126
+ };
127
+ //# sourceMappingURL=s3-stream-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-stream-helpers.js","sourceRoot":"","sources":["../src/s3-stream-helpers.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@furystack/s3-blob-store",
3
+ "version": "1.0.0",
4
+ "description": "S3-compatible adapter for the @furystack/blob-store primitive (AWS S3, MinIO, R2, B2, GCS-S3)",
5
+ "type": "module",
6
+ "scripts": {
7
+ "build": "tsc --outDir ./esm"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "types": "./esm/index.d.ts",
12
+ "import": "./esm/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "esm",
17
+ "src"
18
+ ],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/furystack/furystack.git"
22
+ },
23
+ "keywords": [
24
+ "FuryStack",
25
+ "blob",
26
+ "object-storage",
27
+ "s3",
28
+ "minio",
29
+ "r2"
30
+ ],
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "author": "Gallay Lajos <gallay.lajos@gmail.com>",
35
+ "license": "GPL-2.0",
36
+ "bugs": {
37
+ "url": "https://github.com/furystack/furystack/issues"
38
+ },
39
+ "homepage": "https://github.com/furystack/furystack",
40
+ "dependencies": {
41
+ "@aws-sdk/client-s3": "^3.1060.0",
42
+ "@aws-sdk/s3-request-presigner": "^3.1060.0",
43
+ "@furystack/blob-store": "workspace:^",
44
+ "@furystack/inject": "workspace:^"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^25.9.1",
48
+ "typescript": "^6.0.3",
49
+ "vitest": "^4.1.8"
50
+ },
51
+ "engines": {
52
+ "node": ">=22.0.0"
53
+ },
54
+ "sideEffects": false
55
+ }
@@ -0,0 +1,24 @@
1
+ import type { S3Client } from '@aws-sdk/client-s3'
2
+ import { describe, expect, it } from 'vitest'
3
+ import { BlobStore } from '@furystack/blob-store'
4
+ import { createInjector } from '@furystack/inject'
5
+ import { defineS3BlobStore } from './define-s3-blob-store.js'
6
+ import { S3BlobStore } from './s3-blob-store.js'
7
+
8
+ describe('defineS3BlobStore', () => {
9
+ it('binds an S3BlobStore on the BlobStore token', async () => {
10
+ await using injector = createInjector()
11
+ injector.bind(BlobStore, defineS3BlobStore({ client: {} as S3Client, bucket: 'tests', name: 'bound' }))
12
+ const store = injector.get(BlobStore)
13
+ expect(store).toBeInstanceOf(S3BlobStore)
14
+ expect(store.storeName).toBe('bound')
15
+ })
16
+
17
+ it('disposes the store when the injector tears down', async () => {
18
+ const injector = createInjector()
19
+ injector.bind(BlobStore, defineS3BlobStore({ client: {} as S3Client, bucket: 'tests' }))
20
+ const store = injector.get(BlobStore)
21
+ await injector[Symbol.asyncDispose]()
22
+ await expect(store.head('any')).rejects.toMatchObject({ code: 'io-error' })
23
+ })
24
+ })
@@ -0,0 +1,43 @@
1
+ import type { BlobStore } from '@furystack/blob-store'
2
+ import type { ServiceFactory } from '@furystack/inject'
3
+ import { S3BlobStore, type S3BlobStoreOptions } from './s3-blob-store.js'
4
+
5
+ /**
6
+ * Returns a {@link ServiceFactory} bound to the {@link BlobStore} token,
7
+ * resolving an {@link S3BlobStore} on first access. The caller still
8
+ * owns the lifecycle of the supplied `S3Client`.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { S3Client } from '@aws-sdk/client-s3'
13
+ * import { createInjector } from '@furystack/inject'
14
+ * import { BlobStore } from '@furystack/blob-store'
15
+ * import { defineS3BlobStore } from '@furystack/s3-blob-store'
16
+ *
17
+ * const client = new S3Client({
18
+ * region: 'eu-central-1',
19
+ * credentials: {
20
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
21
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
22
+ * },
23
+ * })
24
+ *
25
+ * await using injector = createInjector()
26
+ * injector.bind(
27
+ * BlobStore,
28
+ * defineS3BlobStore({
29
+ * client,
30
+ * bucket: 'my-app-blobs',
31
+ * keyPrefix: 'tenant-a/',
32
+ * }),
33
+ * )
34
+ * ```
35
+ */
36
+ export const defineS3BlobStore = (options: S3BlobStoreOptions): ServiceFactory<BlobStore> => {
37
+ return ({ onDispose }) => {
38
+ const store = new S3BlobStore(options)
39
+ // eslint-disable-next-line furystack/prefer-using-wrapper -- delegated to onDispose
40
+ onDispose(() => store[Symbol.dispose]())
41
+ return store
42
+ }
43
+ }
@@ -0,0 +1,47 @@
1
+ import { PutBucketLifecycleConfigurationCommand, type S3Client } from '@aws-sdk/client-s3'
2
+
3
+ /**
4
+ * Default rule id used when {@link S3BlobStoreOptions.manageLifecycle} is
5
+ * enabled. Stable, greppable, and easy to remove out-of-band via the AWS
6
+ * console / CLI.
7
+ */
8
+ export const DEFAULT_LIFECYCLE_RULE_ID = 'furystack-blob-store-abort-incomplete-multipart'
9
+
10
+ export type EnsureBucketLifecycleOptions = {
11
+ client: S3Client
12
+ bucket: string
13
+ ruleId: string
14
+ /** Invoked when the lifecycle PUT fails (e.g. missing IAM permission). */
15
+ onError?: (error: unknown) => void
16
+ }
17
+
18
+ /**
19
+ * Best-effort bootstrap of the bucket's "abort incomplete multipart" rule.
20
+ * Swallows errors and forwards them to `onError` — apps surface them via
21
+ * their own telemetry / logger sink.
22
+ *
23
+ * Idempotent at the call site: callers track whether the bootstrap has
24
+ * been attempted and only call this helper on first put.
25
+ */
26
+ export const ensureBucketLifecycle = async (options: EnsureBucketLifecycleOptions): Promise<void> => {
27
+ const { client, bucket, ruleId, onError } = options
28
+ try {
29
+ await client.send(
30
+ new PutBucketLifecycleConfigurationCommand({
31
+ Bucket: bucket,
32
+ LifecycleConfiguration: {
33
+ Rules: [
34
+ {
35
+ ID: ruleId,
36
+ Status: 'Enabled',
37
+ Filter: {},
38
+ AbortIncompleteMultipartUpload: { DaysAfterInitiation: 1 },
39
+ },
40
+ ],
41
+ },
42
+ }),
43
+ )
44
+ } catch (error) {
45
+ onError?.(error)
46
+ }
47
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { defineS3BlobStore } from './define-s3-blob-store.js'
2
+ export { S3BlobStore, S3_MAX_OBJECT_BYTES, type S3BlobStoreOptions } from './s3-blob-store.js'
@@ -0,0 +1,78 @@
1
+ import { CreateBucketCommand, DeleteBucketCommand, S3Client } from '@aws-sdk/client-s3'
2
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest'
3
+ import { S3BlobStore } from './s3-blob-store.js'
4
+
5
+ const MINIO_URL = process.env.MINIO_URL ?? 'http://localhost:9000'
6
+ const ACCESS_KEY = process.env.MINIO_ACCESS_KEY ?? 'minioadmin'
7
+ const SECRET_KEY = process.env.MINIO_SECRET_KEY ?? 'minioadmin'
8
+
9
+ const decode = (data: Uint8Array): string => new TextDecoder().decode(data)
10
+
11
+ const collect = async (stream: ReadableStream<Uint8Array>): Promise<Uint8Array> => {
12
+ const reader = stream.getReader()
13
+ const chunks: Uint8Array[] = []
14
+ for (;;) {
15
+ const { done, value } = await reader.read()
16
+ if (done) break
17
+ chunks.push(value)
18
+ }
19
+ reader.releaseLock()
20
+ const total = chunks.reduce((acc, c) => acc + c.byteLength, 0)
21
+ const merged = new Uint8Array(total)
22
+ let offset = 0
23
+ for (const chunk of chunks) {
24
+ merged.set(chunk, offset)
25
+ offset += chunk.byteLength
26
+ }
27
+ return merged
28
+ }
29
+
30
+ describe('S3BlobStore (integration, requires MinIO at $MINIO_URL or http://localhost:9000)', () => {
31
+ const bucket = `furystack-blob-test-${Date.now()}`
32
+ let client: S3Client
33
+ let store: S3BlobStore
34
+
35
+ beforeAll(async () => {
36
+ client = new S3Client({
37
+ endpoint: MINIO_URL,
38
+ region: 'us-east-1',
39
+ forcePathStyle: true,
40
+ credentials: { accessKeyId: ACCESS_KEY, secretAccessKey: SECRET_KEY },
41
+ })
42
+ await client.send(new CreateBucketCommand({ Bucket: bucket }))
43
+ store = new S3BlobStore({ client, bucket, manageLifecycle: false })
44
+ })
45
+
46
+ afterAll(async () => {
47
+ try {
48
+ const listing = await store.list('')
49
+ await Promise.all(listing.items.map((item) => store.delete(item.key)))
50
+ await client.send(new DeleteBucketCommand({ Bucket: bucket }))
51
+ } finally {
52
+ store[Symbol.dispose]()
53
+ client.destroy()
54
+ }
55
+ })
56
+
57
+ it('round-trips a buffer payload', async () => {
58
+ await store.put('greeting.txt', Buffer.from('hello-minio'), { contentType: 'text/plain' })
59
+ const result = await store.get('greeting.txt')
60
+ expect(result.contentType).toBe('text/plain')
61
+ expect(decode(await collect(result.stream))).toBe('hello-minio')
62
+ })
63
+
64
+ it('lists by prefix', async () => {
65
+ await store.put('list/a', Buffer.from('1'))
66
+ await store.put('list/b', Buffer.from('1'))
67
+ const result = await store.list('list/')
68
+ expect(result.items.map((i) => i.key).sort()).toEqual(['list/a', 'list/b'])
69
+ })
70
+
71
+ it('returns not-found on missing get', async () => {
72
+ await expect(store.get('absent')).rejects.toMatchObject({ code: 'not-found' })
73
+ })
74
+
75
+ it('returns undefined head for missing keys', async () => {
76
+ expect(await store.head('absent')).toBeUndefined()
77
+ })
78
+ })