Skip to content

Commit 320ccd9

Browse files
authored
* add resolvePayloadStoreConfig (#294)
* * add resolvePayloadStoreConfig * * raise version
1 parent 2eb8bbc commit 320ccd9

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

packages/s3-payload-store/lib/S3PayloadStore.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,28 @@ import type { S3 } from '@aws-sdk/client-s3'
55
import { NoSuchKey } from '@aws-sdk/client-s3'
66
import type { PayloadStoreTypes, SerializedPayload } from '@message-queue-toolkit/core'
77

8+
export type S3AwareDependencies = { s3?: S3 }
9+
export type MessageQueuePayloadOffloadingConfig = {
10+
s3PayloadOffloadingBucket?: string
11+
messageSizeThreshold: number
12+
}
13+
14+
export function resolvePayloadStoreConfig(
15+
dependencies: S3AwareDependencies,
16+
config?: MessageQueuePayloadOffloadingConfig,
17+
) {
18+
if (!config?.s3PayloadOffloadingBucket) return undefined
19+
if (!dependencies.s3) throw new Error('AWS S3 client is required for payload offloading')
20+
21+
return {
22+
store: new S3PayloadStore(
23+
{ s3: dependencies.s3 },
24+
{ bucketName: config.s3PayloadOffloadingBucket },
25+
),
26+
messageSizeThreshold: config.messageSizeThreshold,
27+
}
28+
}
29+
830
export type S3PayloadStoreDependencies = {
931
s3: S3
1032
}

packages/s3-payload-store/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@message-queue-toolkit/s3-payload-store",
3-
"version": "2.0.0",
3+
"version": "2.1.0",
44
"private": false,
55
"license": "MIT",
66
"description": "AWS S3-based message store implementation for message-queue-toolkit",

packages/s3-payload-store/test/store/S3PayloadStore.spec.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Readable } from 'node:stream'
33
import { S3 } from '@aws-sdk/client-s3'
44
import { beforeAll, beforeEach, describe, expect, it } from 'vitest'
55

6-
import { S3PayloadStore } from '../../lib/S3PayloadStore.ts'
6+
import { S3PayloadStore, resolvePayloadStoreConfig } from '../../lib/S3PayloadStore.ts'
77
import { assertEmptyBucket, getObjectContent, objectExists } from '../utils/s3Utils.ts'
88
import { streamToString } from '../utils/streamUtils.ts'
99
import { TEST_AWS_CONFIG } from '../utils/testS3Config.ts'
@@ -88,4 +88,31 @@ describe('S3PayloadStore', () => {
8888
await expect(store.deletePayload('non-existing-key')).resolves.not.toThrow()
8989
})
9090
})
91+
describe('resolvePayloadStoreConfig', () => {
92+
it('should return undefined if s3PayloadOffloadingBucket is not set', () => {
93+
const result = resolvePayloadStoreConfig({ s3: {} as any })
94+
expect(result).toBeUndefined()
95+
})
96+
it('should throw an error if S3 is not defined', () => {
97+
expect(() =>
98+
resolvePayloadStoreConfig(
99+
{ s3: undefined },
100+
{
101+
s3PayloadOffloadingBucket: 'test-bucket',
102+
messageSizeThreshold: 1,
103+
},
104+
),
105+
).toThrowError('AWS S3 client is required for payload offloading')
106+
})
107+
it('should payload store config', () => {
108+
const result = resolvePayloadStoreConfig(
109+
{ s3: {} as any },
110+
{ s3PayloadOffloadingBucket: 'test-bucket', messageSizeThreshold: 1 },
111+
)
112+
expect(result).toEqual({
113+
store: expect.any(S3PayloadStore),
114+
messageSizeThreshold: 1,
115+
})
116+
})
117+
})
91118
})

0 commit comments

Comments
 (0)