@breadstone/archipel-mcp 0.0.40 → 0.0.41

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 (58) hide show
  1. package/data/guides/blob-storage.md +20 -16
  2. package/data/packages/platform-blob-storage/api/Class.AwsS3BlobStorageStrategy.md +197 -0
  3. package/data/packages/platform-blob-storage/api/Class.AzureBlobStorageStrategy.md +197 -0
  4. package/data/packages/platform-blob-storage/api/Class.BlobModule.md +20 -10
  5. package/data/packages/platform-blob-storage/api/Class.BlobService.md +8 -8
  6. package/data/packages/platform-blob-storage/api/Class.BlobStorageStrategyBase.md +158 -0
  7. package/data/packages/platform-blob-storage/api/Class.LocalBlobStorageStrategy.md +197 -0
  8. package/data/packages/platform-blob-storage/api/Class.VercelBlobStorageStrategy.md +198 -0
  9. package/data/packages/platform-blob-storage/api/Interface.IBlobDeleteRequest.md +4 -4
  10. package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadRequest.md +5 -5
  11. package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadResult.md +6 -6
  12. package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +20 -10
  13. package/data/packages/platform-blob-storage/api/Interface.IBlobObjectMetadata.md +14 -14
  14. package/data/packages/platform-blob-storage/api/Interface.IBlobSignedUrlRequest.md +5 -5
  15. package/data/packages/platform-blob-storage/api/Interface.IBlobUploadRequest.md +10 -10
  16. package/data/packages/platform-blob-storage/api/Interface.IBlobUploadResult.md +3 -3
  17. package/data/packages/platform-blob-storage/api/TypeAlias.BlobDownloadResponseType.md +1 -1
  18. package/data/packages/platform-blob-storage/api/TypeAlias.BlobUploadBody.md +1 -1
  19. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ACCESS_KEY_ID.md +14 -0
  20. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_BUCKET.md +14 -0
  21. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_CONFIG_ENTRIES.md +14 -0
  22. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ENDPOINT.md +14 -0
  23. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_REGION.md +14 -0
  24. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_SECRET_ACCESS_KEY.md +14 -0
  25. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONNECTION_STRING.md +14 -0
  26. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONTAINER_NAME.md +14 -0
  27. package/data/packages/platform-blob-storage/api/Variable.AZURE_CONFIG_ENTRIES.md +14 -0
  28. package/data/packages/platform-blob-storage/api/{Variable.BLOB_PROVIDER.md → Variable.BLOB_STORAGE_STRATEGY_TOKEN.md} +3 -3
  29. package/data/packages/platform-blob-storage/api/Variable.BlobDownloadResponseTypes.md +5 -5
  30. package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BASE_PATH.md +14 -0
  31. package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BUCKET.md +14 -0
  32. package/data/packages/platform-blob-storage/api/Variable.LOCAL_CONFIG_ENTRIES.md +14 -0
  33. package/data/packages/platform-blob-storage/api/Variable.PLATFORM_BLOB_STORAGE_CONFIG_ENTRIES.md +14 -0
  34. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_BUCKET.md +14 -0
  35. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PUBLIC_URL.md +14 -0
  36. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_READ_WRITE_TOKEN.md +14 -0
  37. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_REGION.md +14 -0
  38. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_URL.md +14 -0
  39. package/data/packages/platform-blob-storage/api/Variable.VERCEL_CONFIG_ENTRIES.md +14 -0
  40. package/data/packages/platform-blob-storage/api/index.md +26 -18
  41. package/data/packages/platform-blob-storage/index.md +104 -68
  42. package/package.json +1 -1
  43. package/data/packages/platform-blob-storage/api/Class.AwsS3BlobProvider.md +0 -196
  44. package/data/packages/platform-blob-storage/api/Class.AzureBlobProvider.md +0 -196
  45. package/data/packages/platform-blob-storage/api/Class.VercelBlobProvider.md +0 -197
  46. package/data/packages/platform-blob-storage/api/Interface.IAwsS3BlobProviderRegistration.md +0 -28
  47. package/data/packages/platform-blob-storage/api/Interface.IAwsS3ProviderOptions.md +0 -68
  48. package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderOptions.md +0 -48
  49. package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderRegistration.md +0 -28
  50. package/data/packages/platform-blob-storage/api/Interface.IBlobProvider.md +0 -114
  51. package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +0 -28
  52. package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderOptions.md +0 -80
  53. package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +0 -28
  54. package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +0 -16
  55. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_PROVIDER_OPTIONS.md +0 -12
  56. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_PROVIDER_OPTIONS.md +0 -12
  57. package/data/packages/platform-blob-storage/api/Variable.BlobProviderKinds.md +0 -26
  58. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PROVIDER_OPTIONS.md +0 -12
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: 'Variable: VERCEL\_BLOB\_READ\_WRITE\_TOKEN'
3
+ generated: true
4
+ editUrl: false
5
+ ---
6
+ # Variable: VERCEL\_BLOB\_READ\_WRITE\_TOKEN
7
+
8
+ ```ts
9
+ const VERCEL_BLOB_READ_WRITE_TOKEN: IConfigKey<string>;
10
+ ```
11
+
12
+ Defined in: [strategies/vercel/env.ts:13](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/strategies/vercel/env.ts#L13)
13
+
14
+ Vercel Blob read/write access token.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: 'Variable: VERCEL\_BLOB\_REGION'
3
+ generated: true
4
+ editUrl: false
5
+ ---
6
+ # Variable: VERCEL\_BLOB\_REGION
7
+
8
+ ```ts
9
+ const VERCEL_BLOB_REGION: IConfigKey<string>;
10
+ ```
11
+
12
+ Defined in: [strategies/vercel/env.ts:19](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/strategies/vercel/env.ts#L19)
13
+
14
+ Vercel Blob region.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: 'Variable: VERCEL\_BLOB\_URL'
3
+ generated: true
4
+ editUrl: false
5
+ ---
6
+ # Variable: VERCEL\_BLOB\_URL
7
+
8
+ ```ts
9
+ const VERCEL_BLOB_URL: IConfigKey<string>;
10
+ ```
11
+
12
+ Defined in: [strategies/vercel/env.ts:10](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/strategies/vercel/env.ts#L10)
13
+
14
+ Vercel Blob API URL.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: 'Variable: VERCEL\_CONFIG\_ENTRIES'
3
+ generated: true
4
+ editUrl: false
5
+ ---
6
+ # Variable: VERCEL\_CONFIG\_ENTRIES
7
+
8
+ ```ts
9
+ const VERCEL_CONFIG_ENTRIES: ReadonlyArray<Omit<IConfigRegistryEntry, "module">>;
10
+ ```
11
+
12
+ Defined in: [strategies/vercel/env.ts:25](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/strategies/vercel/env.ts#L25)
13
+
14
+ Configuration entries required by the Vercel blob storage strategy.
@@ -9,35 +9,29 @@ editUrl: false
9
9
 
10
10
  | Class | Description |
11
11
  | ------ | ------ |
12
- | [AwsS3BlobProvider](Class.AwsS3BlobProvider) | Provides an implementation of [IBlobProvider](Interface.IBlobProvider) for Amazon S3. |
13
- | [AzureBlobProvider](Class.AzureBlobProvider) | Provides an implementation of [IBlobProvider](Interface.IBlobProvider) for Microsoft Azure Blob Storage. |
12
+ | [AwsS3BlobStorageStrategy](Class.AwsS3BlobStorageStrategy) | Provides a blob storage strategy backed by Amazon S3. |
13
+ | [AzureBlobStorageStrategy](Class.AzureBlobStorageStrategy) | Provides a blob storage strategy backed by Microsoft Azure Blob Storage. |
14
14
  | [BlobHealthIndicator](Class.BlobHealthIndicator) | Health indicator for blob storage service. |
15
- | [BlobModule](Class.BlobModule) | NestJS module responsible for providing blob storage services. |
15
+ | [BlobModule](Class.BlobModule) | NestJS module responsible for providing blob storage services. Uses a strategy pattern to support pluggable storage backends. |
16
16
  | [BlobObjectPersistencePort](Class.BlobObjectPersistencePort) | Abstract port for persisting blob object metadata. Consuming projects must provide a concrete implementation (e.g. backed by Prisma, Mongo, etc.) and register it via `BlobModule.forRoot({ objectPersistence: MyAdapter })`. |
17
17
  | [BlobService](Class.BlobService) | Provides a generic abstraction for blob storage operations independent of the underlying provider. |
18
+ | [BlobStorageStrategyBase](Class.BlobStorageStrategyBase) | Abstract base class for blob storage strategies. Every concrete provider (AWS S3, Azure, Vercel, Local, etc.) must extend this class. Serves as both the type contract and the NestJS DI token type reference. |
18
19
  | [BlobVariantPersistencePort](Class.BlobVariantPersistencePort) | Abstract port for persisting blob variant metadata. Consuming projects must provide a concrete implementation and register it via `BlobModule.forRoot({ variantPersistence: MyAdapter })`. |
19
- | [VercelBlobProvider](Class.VercelBlobProvider) | Provides an implementation of [IBlobProvider](Interface.IBlobProvider) for Vercel Blob storage. |
20
+ | [LocalBlobStorageStrategy](Class.LocalBlobStorageStrategy) | Provides a blob storage strategy backed by the local filesystem. |
21
+ | [VercelBlobStorageStrategy](Class.VercelBlobStorageStrategy) | Provides a blob storage strategy backed by the Vercel Blob API. |
20
22
 
21
23
  ## Interfaces
22
24
 
23
25
  | Interface | Description |
24
26
  | ------ | ------ |
25
- | [IAwsS3BlobProviderRegistration](Interface.IAwsS3BlobProviderRegistration) | - |
26
- | [IAwsS3ProviderOptions](Interface.IAwsS3ProviderOptions) | - |
27
- | [IAzureBlobProviderOptions](Interface.IAzureBlobProviderOptions) | - |
28
- | [IAzureBlobProviderRegistration](Interface.IAzureBlobProviderRegistration) | - |
29
27
  | [IBlobDeleteRequest](Interface.IBlobDeleteRequest) | - |
30
28
  | [IBlobDownloadRequest](Interface.IBlobDownloadRequest) | - |
31
29
  | [IBlobDownloadResult](Interface.IBlobDownloadResult) | - |
32
30
  | [IBlobModuleOptions](Interface.IBlobModuleOptions) | - |
33
31
  | [IBlobObjectMetadata](Interface.IBlobObjectMetadata) | - |
34
- | [IBlobProvider](Interface.IBlobProvider) | - |
35
32
  | [IBlobSignedUrlRequest](Interface.IBlobSignedUrlRequest) | - |
36
33
  | [IBlobUploadRequest](Interface.IBlobUploadRequest) | - |
37
34
  | [IBlobUploadResult](Interface.IBlobUploadResult) | - |
38
- | [ICustomBlobProviderRegistration](Interface.ICustomBlobProviderRegistration) | - |
39
- | [IVercelBlobProviderOptions](Interface.IVercelBlobProviderOptions) | - |
40
- | [IVercelBlobProviderRegistration](Interface.IVercelBlobProviderRegistration) | - |
41
35
 
42
36
  ## Type Aliases
43
37
 
@@ -45,15 +39,29 @@ editUrl: false
45
39
  | ------ | ------ |
46
40
  | [BlobDownloadResponseType](TypeAlias.BlobDownloadResponseType) | - |
47
41
  | [BlobUploadBody](TypeAlias.BlobUploadBody) | - |
48
- | [IBlobProviderRegistration](TypeAlias.IBlobProviderRegistration) | - |
49
42
 
50
43
  ## Variables
51
44
 
52
45
  | Variable | Description |
53
46
  | ------ | ------ |
54
- | [AWS\_S3\_PROVIDER\_OPTIONS](Variable.AWS_S3_PROVIDER_OPTIONS) | - |
55
- | [AZURE\_BLOB\_PROVIDER\_OPTIONS](Variable.AZURE_BLOB_PROVIDER_OPTIONS) | - |
56
- | [BLOB\_PROVIDER](Variable.BLOB_PROVIDER) | - |
47
+ | [AWS\_S3\_ACCESS\_KEY\_ID](Variable.AWS_S3_ACCESS_KEY_ID) | AWS S3 access key ID. |
48
+ | [AWS\_S3\_BUCKET](Variable.AWS_S3_BUCKET) | AWS S3 bucket name. |
49
+ | [AWS\_S3\_CONFIG\_ENTRIES](Variable.AWS_S3_CONFIG_ENTRIES) | Configuration entries required by the AWS S3 blob storage strategy. |
50
+ | [AWS\_S3\_ENDPOINT](Variable.AWS_S3_ENDPOINT) | AWS S3 custom endpoint (for S3-compatible providers). |
51
+ | [AWS\_S3\_REGION](Variable.AWS_S3_REGION) | AWS S3 region. |
52
+ | [AWS\_S3\_SECRET\_ACCESS\_KEY](Variable.AWS_S3_SECRET_ACCESS_KEY) | AWS S3 secret access key. |
53
+ | [AZURE\_BLOB\_CONNECTION\_STRING](Variable.AZURE_BLOB_CONNECTION_STRING) | Azure Blob Storage connection string. |
54
+ | [AZURE\_BLOB\_CONTAINER\_NAME](Variable.AZURE_BLOB_CONTAINER_NAME) | Azure Blob Storage container name. |
55
+ | [AZURE\_CONFIG\_ENTRIES](Variable.AZURE_CONFIG_ENTRIES) | Configuration entries required by the Azure blob storage strategy. |
56
+ | [BLOB\_STORAGE\_STRATEGY\_TOKEN](Variable.BLOB_STORAGE_STRATEGY_TOKEN) | - |
57
57
  | [BlobDownloadResponseTypes](Variable.BlobDownloadResponseTypes) | - |
58
- | [BlobProviderKinds](Variable.BlobProviderKinds) | - |
59
- | [VERCEL\_BLOB\_PROVIDER\_OPTIONS](Variable.VERCEL_BLOB_PROVIDER_OPTIONS) | - |
58
+ | [LOCAL\_BLOB\_BASE\_PATH](Variable.LOCAL_BLOB_BASE_PATH) | Local blob storage base path. |
59
+ | [LOCAL\_BLOB\_BUCKET](Variable.LOCAL_BLOB_BUCKET) | Local blob storage bucket (subdirectory). |
60
+ | [LOCAL\_CONFIG\_ENTRIES](Variable.LOCAL_CONFIG_ENTRIES) | Configuration entries required by the local blob storage strategy. |
61
+ | [PLATFORM\_BLOB\_STORAGE\_CONFIG\_ENTRIES](Variable.PLATFORM_BLOB_STORAGE_CONFIG_ENTRIES) | All configuration entries for `platform-blob-storage`. All keys are optional at the aggregate level. |
62
+ | [VERCEL\_BLOB\_BUCKET](Variable.VERCEL_BLOB_BUCKET) | Vercel Blob bucket name. |
63
+ | [VERCEL\_BLOB\_PUBLIC\_URL](Variable.VERCEL_BLOB_PUBLIC_URL) | Vercel Blob public URL. |
64
+ | [VERCEL\_BLOB\_READ\_WRITE\_TOKEN](Variable.VERCEL_BLOB_READ_WRITE_TOKEN) | Vercel Blob read/write access token. |
65
+ | [VERCEL\_BLOB\_REGION](Variable.VERCEL_BLOB_REGION) | Vercel Blob region. |
66
+ | [VERCEL\_BLOB\_URL](Variable.VERCEL_BLOB_URL) | Vercel Blob API URL. |
67
+ | [VERCEL\_CONFIG\_ENTRIES](Variable.VERCEL_CONFIG_ENTRIES) | Configuration entries required by the Vercel blob storage strategy. |
@@ -8,7 +8,7 @@ package: '@breadstone/archipel-platform-blob-storage'
8
8
 
9
9
  # platform-blob-storage
10
10
 
11
- Cloud file storage abstraction supporting pluggable providers and optional metadata persistence via ports. Ships with Vercel Blob, Azure Blob Storage, and AWS S3 providers out of the box.
11
+ Cloud file storage abstraction supporting pluggable strategies and optional metadata persistence via ports. Ships with Vercel Blob, Azure Blob Storage, AWS S3, and local filesystem strategies out of the box.
12
12
 
13
13
  **Package:** `@breadstone/archipel-platform-blob-storage`
14
14
 
@@ -19,15 +19,20 @@ Cloud file storage abstraction supporting pluggable providers and optional metad
19
19
  ```typescript
20
20
  import { Module } from '@nestjs/common';
21
21
  import { BlobModule } from '@breadstone/archipel-platform-blob-storage';
22
+ import { VercelBlobStorageStrategy, VERCEL_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/vercel';
22
23
 
23
24
  @Module({
24
25
  imports: [
25
26
  // Minimal setup — Vercel Blob, no metadata tracking
26
- BlobModule.forRoot(),
27
+ BlobModule.register({
28
+ storageStrategy: VercelBlobStorageStrategy,
29
+ configEntries: VERCEL_CONFIG_ENTRIES,
30
+ }),
27
31
 
28
- // Full setup — custom provider + metadata tracking
29
- BlobModule.forRoot({
30
- provider: { kind: 'vercel' },
32
+ // Full setup — with metadata tracking
33
+ BlobModule.register({
34
+ storageStrategy: VercelBlobStorageStrategy,
35
+ configEntries: VERCEL_CONFIG_ENTRIES,
31
36
  objectPersistence: PrismaBlobObjectAdapter,
32
37
  variantPersistence: PrismaBlobVariantAdapter,
33
38
  isGlobal: true,
@@ -43,27 +48,36 @@ export class AppModule {}
43
48
 
44
49
  ### IBlobModuleOptions
45
50
 
46
- | Property | Type | Required | Default | Description |
47
- | -------------------- | ---------------------------------- | -------- | ----------- | -------------------------------------- |
48
- | `provider` | `IBlobProviderRegistration` | No | Vercel Blob | Storage backend to use |
49
- | `objectPersistence` | `Type<BlobObjectPersistencePort>` | No | | Metadata tracking for uploaded objects |
50
- | `variantPersistence` | `Type<BlobVariantPersistencePort>` | No | — | Metadata tracking for image variants |
51
- | `isGlobal` | `boolean` | No | `true` | Register as a global module |
51
+ | Property | Type | Required | Default | Description |
52
+ | -------------------- | ---------------------------------- | -------- | ------- | -------------------------------------- |
53
+ | `storageStrategy` | `Type<BlobStorageStrategyBase>` | Yes | | Storage strategy to use |
54
+ | `configEntries` | `IConfigEntry[]` | No | `[]` | Config entries for the chosen strategy |
55
+ | `objectPersistence` | `Type<BlobObjectPersistencePort>` | No | — | Metadata tracking for uploaded objects |
56
+ | `variantPersistence` | `Type<BlobVariantPersistencePort>` | No | | Metadata tracking for image variants |
57
+ | `isGlobal` | `boolean` | No | `true` | Register as a global module |
52
58
 
53
- ### Provider Registration
59
+ ### Strategy Registration
54
60
 
55
61
  ```typescript
56
- // Vercel Blob (default)
57
- { kind: 'vercel', options?: { token?: string } }
62
+ import { VercelBlobStorageStrategy, VERCEL_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/vercel';
63
+ import { AzureBlobStorageStrategy, AZURE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/azure';
64
+ import { AwsS3BlobStorageStrategy, AWS_S3_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/aws-s3';
65
+ import { LocalBlobStorageStrategy, LOCAL_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/local';
66
+
67
+ // Vercel Blob
68
+ BlobModule.register({ storageStrategy: VercelBlobStorageStrategy, configEntries: VERCEL_CONFIG_ENTRIES });
58
69
 
59
70
  // Azure Blob Storage
60
- { kind: 'azure', options?: { connectionString?: string; containerName?: string } }
71
+ BlobModule.register({ storageStrategy: AzureBlobStorageStrategy, configEntries: AZURE_CONFIG_ENTRIES });
61
72
 
62
73
  // AWS S3
63
- { kind: 'aws-s3', options?: { region?: string; accessKeyId?: string; secretAccessKey?: string; bucket?: string; endpoint?: string } }
74
+ BlobModule.register({ storageStrategy: AwsS3BlobStorageStrategy, configEntries: AWS_S3_CONFIG_ENTRIES });
64
75
 
65
- // Custom provider
66
- { kind: 'custom', useClass: MyBlobProvider }
76
+ // Local filesystem
77
+ BlobModule.register({ storageStrategy: LocalBlobStorageStrategy, configEntries: LOCAL_CONFIG_ENTRIES });
78
+
79
+ // Custom strategy — extend BlobStorageStrategyBase
80
+ BlobModule.register({ storageStrategy: MyCustomStrategy });
67
81
  ```
68
82
 
69
83
  ---
@@ -204,32 +218,33 @@ export class PrismaBlobObjectAdapter extends BlobObjectPersistencePort {
204
218
 
205
219
  ---
206
220
 
207
- ## Built-in Providers
221
+ ## Built-in Strategies
208
222
 
209
- ### VercelBlobProvider
223
+ ### VercelBlobStorageStrategy
210
224
 
211
- The default blob provider using Vercel's Blob Storage API.
225
+ The Vercel Blob storage strategy using Vercel's Blob Storage API.
212
226
 
213
227
  ```typescript
214
- BlobModule.forRoot({
215
- provider: {
216
- kind: 'vercel',
217
- options: { token: process.env.BLOB_READ_WRITE_TOKEN },
218
- },
228
+ import { VercelBlobStorageStrategy, VERCEL_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/vercel';
229
+
230
+ BlobModule.register({
231
+ storageStrategy: VercelBlobStorageStrategy,
232
+ configEntries: VERCEL_CONFIG_ENTRIES,
219
233
  });
220
234
  ```
221
235
 
222
- **Environment variables:** `BLOB_READ_WRITE_TOKEN`, `BLOB_API_URL`, `BLOB_PUBLIC_URL`
236
+ **Environment variables:** `VERCEL_BLOB_READ_WRITE_TOKEN`, `VERCEL_BLOB_URL`, `VERCEL_BLOB_PUBLIC_URL`, `VERCEL_BLOB_BUCKET`, `VERCEL_BLOB_REGION`
223
237
 
224
- ### AzureBlobProvider
238
+ ### AzureBlobStorageStrategy
225
239
 
226
240
  Microsoft Azure Blob Storage integration using `@azure/storage-blob`.
227
241
 
228
242
  ```typescript
229
- import { AzureBlobProvider } from '@breadstone/archipel-platform-blob-storage/azure';
243
+ import { AzureBlobStorageStrategy, AZURE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/azure';
230
244
 
231
- BlobModule.forRoot({
232
- provider: { kind: 'azure' },
245
+ BlobModule.register({
246
+ storageStrategy: AzureBlobStorageStrategy,
247
+ configEntries: AZURE_CONFIG_ENTRIES,
233
248
  });
234
249
  ```
235
250
 
@@ -241,19 +256,20 @@ BlobModule.forRoot({
241
256
  | `AZURE_BLOB_ACCOUNT_NAME` | No* | Storage account name for DefaultAzureCredential |
242
257
  | `AZURE_BLOB_CONTAINER_NAME` | Yes | Container to operate on |
243
258
 
244
- > **\*** Provide either `connectionString` or `accountName`. When `accountName` is set without a connection string, the provider authenticates via `DefaultAzureCredential` from `@azure/identity` (supports managed identity, environment credentials, etc.). Install `@azure/identity` as a peer dependency when using this mode.
259
+ > **\*** Provide either `connectionString` or `accountName`. When `accountName` is set without a connection string, the strategy authenticates via `DefaultAzureCredential` from `@azure/identity` (supports managed identity, environment credentials, etc.). Install `@azure/identity` as a peer dependency when using this mode.
245
260
 
246
- The provider supports SAS token generation for signed URLs and lazy-loads the Azure SDK for tree-shaking.
261
+ The strategy supports SAS token generation for signed URLs and lazy-loads the Azure SDK for tree-shaking.
247
262
 
248
- ### AwsS3BlobProvider
263
+ ### AwsS3BlobStorageStrategy
249
264
 
250
265
  Amazon S3 integration using `@aws-sdk/client-s3` and `@aws-sdk/s3-request-presigner`.
251
266
 
252
267
  ```typescript
253
- import { AwsS3BlobProvider } from '@breadstone/archipel-platform-blob-storage/aws-s3';
268
+ import { AwsS3BlobStorageStrategy, AWS_S3_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/aws-s3';
254
269
 
255
- BlobModule.forRoot({
256
- provider: { kind: 'aws-s3' },
270
+ BlobModule.register({
271
+ storageStrategy: AwsS3BlobStorageStrategy,
272
+ configEntries: AWS_S3_CONFIG_ENTRIES,
257
273
  });
258
274
  ```
259
275
 
@@ -269,16 +285,37 @@ BlobModule.forRoot({
269
285
 
270
286
  > **\*** `accessKeyId` and `secretAccessKey` must be provided **together**. Omit both to use the default AWS credential chain (IAM roles, instance profiles, environment variables).
271
287
 
272
- The provider supports pre-signed URLs and lazy-loads the AWS SDK for tree-shaking. `downloadObject()` gracefully handles JSON parse errors, returning the raw response body when content cannot be parsed.
288
+ The strategy supports pre-signed URLs and lazy-loads the AWS SDK for tree-shaking. `downloadObject()` gracefully handles JSON parse errors, returning the raw response body when content cannot be parsed.
273
289
 
274
- ### Custom Provider
290
+ ### LocalBlobStorageStrategy
275
291
 
276
- Implement `IBlobProvider` for any other storage backend (GCS, MinIO, etc.):
292
+ Local filesystem storage for development and testing.
293
+
294
+ ```typescript
295
+ import { LocalBlobStorageStrategy, LOCAL_CONFIG_ENTRIES } from '@breadstone/archipel-platform-blob-storage/strategies/local';
296
+
297
+ BlobModule.register({
298
+ storageStrategy: LocalBlobStorageStrategy,
299
+ configEntries: LOCAL_CONFIG_ENTRIES,
300
+ });
301
+ ```
302
+
303
+ **Environment variables:**
304
+
305
+ | Variable | Required | Default | Description |
306
+ | ---------------------- | -------- | ------------- | ------------------------------------- |
307
+ | `LOCAL_BLOB_BASE_PATH` | No | `./blob-data` | Base directory for local file storage |
308
+ | `LOCAL_BLOB_BUCKET` | No | `default` | Default bucket subdirectory |
309
+
310
+ ### Custom Strategy
311
+
312
+ Extend `BlobStorageStrategyBase` for any other storage backend (GCS, MinIO, etc.):
277
313
 
278
314
  ```typescript
279
315
  @Injectable()
280
- export class GcsBlobProvider implements IBlobProvider {
281
- public readonly providerId = 'gcs';
316
+ export class GcsBlobStorageStrategy extends BlobStorageStrategyBase {
317
+ public override readonly providerId = 'gcs';
318
+ public override readonly defaultBucket = 'my-gcs-bucket';
282
319
 
283
320
  public async uploadObject(request: IBlobUploadRequest): Promise<IBlobUploadResult> {
284
321
  // GCS upload implementation
@@ -292,15 +329,13 @@ export class GcsBlobProvider implements IBlobProvider {
292
329
  // GCS delete implementation
293
330
  }
294
331
 
295
- public async createSignedUrl(request: IBlobSignedUrlRequest): Promise<string> {
332
+ public override async createSignedUrl(request: IBlobSignedUrlRequest): Promise<string> {
296
333
  // GCS signed URL
297
334
  }
298
335
  }
299
336
 
300
337
  // Register
301
- BlobModule.forRoot({
302
- provider: { kind: 'custom', useClass: GcsBlobProvider },
303
- });
338
+ BlobModule.register({ storageStrategy: GcsBlobStorageStrategy });
304
339
  ```
305
340
 
306
341
  ---
@@ -315,7 +350,7 @@ import { HealthModule } from '@breadstone/archipel-platform-health';
315
350
 
316
351
  @Module({
317
352
  imports: [
318
- BlobModule.forRoot({ /* ... */ }),
353
+ BlobModule.register({ /* ... */ }),
319
354
  HealthModule.withIndicators([BlobHealthIndicator]),
320
355
  ],
321
356
  })
@@ -331,30 +366,31 @@ export class AppModule {}
331
366
 
332
367
  ## Sub-path Imports
333
368
 
334
- Each provider is tree-shakeable via sub-path imports:
369
+ Each strategy is tree-shakeable via sub-path imports:
335
370
 
336
- | Import Path | Contents |
337
- | --------------------------------------------------- | ----------------------------------------------------- |
338
- | `@breadstone/archipel-platform-blob-storage` | Core module, service, ports, interfaces |
339
- | `@breadstone/archipel-platform-blob-storage/vercel` | VercelBlobProvider, VERCEL_BLOB_PROVIDER_OPTIONS |
340
- | `@breadstone/archipel-platform-blob-storage/azure` | AzureBlobProvider, AZURE_BLOB_PROVIDER_OPTIONS |
341
- | `@breadstone/archipel-platform-blob-storage/aws-s3` | AwsS3BlobProvider, AWS_S3_PROVIDER_OPTIONS |
342
- | `@breadstone/archipel-platform-blob-storage/health` | BlobHealthIndicator |
371
+ | Import Path | Contents |
372
+ | -------------------------------------------------------------- | ---------------------------------------------------------- |
373
+ | `@breadstone/archipel-platform-blob-storage` | Core module, service, ports, interfaces, abstract base |
374
+ | `@breadstone/archipel-platform-blob-storage/strategies/vercel` | VercelBlobStorageStrategy, VERCEL_CONFIG_ENTRIES |
375
+ | `@breadstone/archipel-platform-blob-storage/strategies/azure` | AzureBlobStorageStrategy, AZURE_CONFIG_ENTRIES |
376
+ | `@breadstone/archipel-platform-blob-storage/strategies/aws-s3` | AwsS3BlobStorageStrategy, AWS_S3_CONFIG_ENTRIES |
377
+ | `@breadstone/archipel-platform-blob-storage/strategies/local` | LocalBlobStorageStrategy, LOCAL_CONFIG_ENTRIES |
378
+ | `@breadstone/archipel-platform-blob-storage/health` | BlobHealthIndicator |
343
379
 
344
380
  ---
345
381
 
346
382
  ## Exports Summary
347
383
 
348
- | Export | Type | Description |
349
- | ---------------------------- | ------------- | ----------------------------------------------------- |
350
- | `BlobModule` | NestJS Module | Main module with `forRoot()` |
351
- | `BlobService` | Service | Upload, download, delete, signed URLs |
352
- | `BlobObjectPersistencePort` | Port | Object metadata tracking |
353
- | `BlobVariantPersistencePort` | Port | Variant metadata tracking |
354
- | `VercelBlobProvider` | Provider | Vercel Blob implementation (sub-path) |
355
- | `AzureBlobProvider` | Provider | Azure Blob Storage implementation (sub-path) |
356
- | `AwsS3BlobProvider` | Provider | AWS S3 implementation (sub-path) |
357
- | `BlobHealthIndicator` | Health | Blob storage health check (`/health` subpath) |
358
- | `IBlobProvider` | Interface | Custom provider contract |
359
- | `BlobProviderKinds` | Constant | `'vercel'` \| `'azure'` \| `'aws-s3'` \| `'custom'` |
360
- | `BlobDownloadResponseTypes` | Constant | `'arraybuffer'` \| `'json'` \| `'stream'` \| `'text'` |
384
+ | Export | Type | Description |
385
+ | ----------------------------- | ------------- | ------------------------------------------------------ |
386
+ | `BlobModule` | NestJS Module | Main module with `register()` |
387
+ | `BlobService` | Service | Upload, download, delete, signed URLs |
388
+ | `BlobStorageStrategyBase` | Abstract | Base class for custom storage strategies |
389
+ | `BlobObjectPersistencePort` | Port | Object metadata tracking |
390
+ | `BlobVariantPersistencePort` | Port | Variant metadata tracking |
391
+ | `VercelBlobStorageStrategy` | Strategy | Vercel Blob implementation (sub-path) |
392
+ | `AzureBlobStorageStrategy` | Strategy | Azure Blob Storage implementation (sub-path) |
393
+ | `AwsS3BlobStorageStrategy` | Strategy | AWS S3 implementation (sub-path) |
394
+ | `LocalBlobStorageStrategy` | Strategy | Local filesystem implementation (sub-path) |
395
+ | `BlobHealthIndicator` | Health | Blob storage health check (`/health` subpath) |
396
+ | `BlobDownloadResponseTypes` | Constant | `'arraybuffer'` \| `'json'` \| `'stream'` \| `'text'` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@breadstone/archipel-mcp",
3
- "version": "0.0.40",
3
+ "version": "0.0.41",
4
4
  "description": "MCP server providing Archipel platform knowledge - documentation, query patterns, and coding conventions - to AI development tools.",
5
5
  "type": "commonjs",
6
6
  "main": "./src/main.js",
@@ -1,196 +0,0 @@
1
- ---
2
- title: 'Class: AwsS3BlobProvider'
3
- generated: true
4
- editUrl: false
5
- ---
6
- # Class: AwsS3BlobProvider
7
-
8
- Defined in: [providers/AwsS3BlobProvider.ts:38](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L38)
9
-
10
- Provides an implementation of [IBlobProvider](Interface.IBlobProvider) for Amazon S3.
11
-
12
- ## Implements
13
-
14
- - [`IBlobProvider`](Interface.IBlobProvider)
15
-
16
- ## Constructors
17
-
18
- ### Constructor
19
-
20
- ```ts
21
- new AwsS3BlobProvider(options): AwsS3BlobProvider;
22
- ```
23
-
24
- Defined in: [providers/AwsS3BlobProvider.ts:55](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L55)
25
-
26
- Initializes a new instance of the AwsS3BlobProvider class.
27
-
28
- #### Parameters
29
-
30
- | Parameter | Type | Description |
31
- | ------ | ------ | ------ |
32
- | `options` | [`IAwsS3ProviderOptions`](Interface.IAwsS3ProviderOptions) | The provider configuration options. |
33
-
34
- #### Returns
35
-
36
- `AwsS3BlobProvider`
37
-
38
- ## Accessors
39
-
40
- ### defaultBucket
41
-
42
- #### Get Signature
43
-
44
- ```ts
45
- get defaultBucket(): string;
46
- ```
47
-
48
- Defined in: [providers/AwsS3BlobProvider.ts:90](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L90)
49
-
50
- Gets the default bucket configured for the provider.
51
-
52
- ##### Returns
53
-
54
- `string`
55
-
56
- #### Implementation of
57
-
58
- [`IBlobProvider`](Interface.IBlobProvider).[`defaultBucket`](Interface.IBlobProvider#defaultbucket)
59
-
60
- ***
61
-
62
- ### providerId
63
-
64
- #### Get Signature
65
-
66
- ```ts
67
- get providerId(): string;
68
- ```
69
-
70
- Defined in: [providers/AwsS3BlobProvider.ts:83](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L83)
71
-
72
- Gets the identifier used to persist provider metadata.
73
-
74
- ##### Returns
75
-
76
- `string`
77
-
78
- #### Implementation of
79
-
80
- [`IBlobProvider`](Interface.IBlobProvider).[`providerId`](Interface.IBlobProvider#providerid)
81
-
82
- ## Methods
83
-
84
- ### createSignedUrl()
85
-
86
- ```ts
87
- createSignedUrl(request): Promise<string>;
88
- ```
89
-
90
- Defined in: [providers/AwsS3BlobProvider.ts:210](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L210)
91
-
92
- Creates a pre-signed URL for the specified blob object.
93
-
94
- #### Parameters
95
-
96
- | Parameter | Type | Description |
97
- | ------ | ------ | ------ |
98
- | `request` | [`IBlobSignedUrlRequest`](Interface.IBlobSignedUrlRequest) | The request describing the object to link. |
99
-
100
- #### Returns
101
-
102
- `Promise`\<`string`\>
103
-
104
- The generated pre-signed URL.
105
-
106
- #### Implementation of
107
-
108
- [`IBlobProvider`](Interface.IBlobProvider).[`createSignedUrl`](Interface.IBlobProvider#createsignedurl)
109
-
110
- ***
111
-
112
- ### deleteObject()
113
-
114
- ```ts
115
- deleteObject(request): Promise<void>;
116
- ```
117
-
118
- Defined in: [providers/AwsS3BlobProvider.ts:186](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L186)
119
-
120
- Deletes a blob object from Amazon S3.
121
-
122
- #### Parameters
123
-
124
- | Parameter | Type | Description |
125
- | ------ | ------ | ------ |
126
- | `request` | [`IBlobDeleteRequest`](Interface.IBlobDeleteRequest) | The delete request describing the object to remove. |
127
-
128
- #### Returns
129
-
130
- `Promise`\<`void`\>
131
-
132
- #### Implementation of
133
-
134
- [`IBlobProvider`](Interface.IBlobProvider).[`deleteObject`](Interface.IBlobProvider#deleteobject)
135
-
136
- ***
137
-
138
- ### downloadObject()
139
-
140
- ```ts
141
- downloadObject<TData>(request): Promise<IBlobDownloadResult<TData>>;
142
- ```
143
-
144
- Defined in: [providers/AwsS3BlobProvider.ts:156](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L156)
145
-
146
- Downloads a blob object from Amazon S3.
147
-
148
- #### Type Parameters
149
-
150
- | Type Parameter |
151
- | ------ |
152
- | `TData` |
153
-
154
- #### Parameters
155
-
156
- | Parameter | Type | Description |
157
- | ------ | ------ | ------ |
158
- | `request` | [`IBlobDownloadRequest`](Interface.IBlobDownloadRequest) | The download request describing the object to download. |
159
-
160
- #### Returns
161
-
162
- `Promise`\<[`IBlobDownloadResult`](Interface.IBlobDownloadResult)\<`TData`\>\>
163
-
164
- The download result including payload and metadata.
165
-
166
- #### Implementation of
167
-
168
- [`IBlobProvider`](Interface.IBlobProvider).[`downloadObject`](Interface.IBlobProvider#downloadobject)
169
-
170
- ***
171
-
172
- ### uploadObject()
173
-
174
- ```ts
175
- uploadObject(request): Promise<IBlobUploadResult>;
176
- ```
177
-
178
- Defined in: [providers/AwsS3BlobProvider.ts:105](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AwsS3BlobProvider.ts#L105)
179
-
180
- Uploads a blob object to Amazon S3.
181
-
182
- #### Parameters
183
-
184
- | Parameter | Type | Description |
185
- | ------ | ------ | ------ |
186
- | `request` | [`IBlobUploadRequest`](Interface.IBlobUploadRequest) | The upload request describing the object to upload. |
187
-
188
- #### Returns
189
-
190
- `Promise`\<[`IBlobUploadResult`](Interface.IBlobUploadResult)\>
191
-
192
- The resulting upload metadata.
193
-
194
- #### Implementation of
195
-
196
- [`IBlobProvider`](Interface.IBlobProvider).[`uploadObject`](Interface.IBlobProvider#uploadobject)