@breadstone/archipel-mcp 0.0.40 → 0.0.42

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 (131) hide show
  1. package/data/guides/blob-storage.md +20 -16
  2. package/data/guides/implementing-ports.md +2 -0
  3. package/data/guides/payments-and-feature-gating.md +76 -45
  4. package/data/packages/platform-blob-storage/api/Class.AwsS3BlobStorageStrategy.md +197 -0
  5. package/data/packages/platform-blob-storage/api/Class.AzureBlobStorageStrategy.md +197 -0
  6. package/data/packages/platform-blob-storage/api/Class.BlobModule.md +20 -10
  7. package/data/packages/platform-blob-storage/api/Class.BlobService.md +8 -8
  8. package/data/packages/platform-blob-storage/api/Class.BlobStorageStrategyBase.md +158 -0
  9. package/data/packages/platform-blob-storage/api/Class.LocalBlobStorageStrategy.md +197 -0
  10. package/data/packages/platform-blob-storage/api/Class.VercelBlobStorageStrategy.md +198 -0
  11. package/data/packages/platform-blob-storage/api/Interface.IBlobDeleteRequest.md +4 -4
  12. package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadRequest.md +5 -5
  13. package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadResult.md +6 -6
  14. package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +20 -10
  15. package/data/packages/platform-blob-storage/api/Interface.IBlobObjectMetadata.md +14 -14
  16. package/data/packages/platform-blob-storage/api/Interface.IBlobSignedUrlRequest.md +5 -5
  17. package/data/packages/platform-blob-storage/api/Interface.IBlobUploadRequest.md +10 -10
  18. package/data/packages/platform-blob-storage/api/Interface.IBlobUploadResult.md +3 -3
  19. package/data/packages/platform-blob-storage/api/TypeAlias.BlobDownloadResponseType.md +1 -1
  20. package/data/packages/platform-blob-storage/api/TypeAlias.BlobUploadBody.md +1 -1
  21. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ACCESS_KEY_ID.md +14 -0
  22. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_BUCKET.md +14 -0
  23. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_CONFIG_ENTRIES.md +14 -0
  24. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ENDPOINT.md +14 -0
  25. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_REGION.md +14 -0
  26. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_SECRET_ACCESS_KEY.md +14 -0
  27. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONNECTION_STRING.md +14 -0
  28. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONTAINER_NAME.md +14 -0
  29. package/data/packages/platform-blob-storage/api/Variable.AZURE_CONFIG_ENTRIES.md +14 -0
  30. package/data/packages/platform-blob-storage/api/{Variable.BLOB_PROVIDER.md → Variable.BLOB_STORAGE_STRATEGY_TOKEN.md} +3 -3
  31. package/data/packages/platform-blob-storage/api/Variable.BlobDownloadResponseTypes.md +5 -5
  32. package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BASE_PATH.md +14 -0
  33. package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BUCKET.md +14 -0
  34. package/data/packages/platform-blob-storage/api/Variable.LOCAL_CONFIG_ENTRIES.md +14 -0
  35. package/data/packages/platform-blob-storage/api/Variable.PLATFORM_BLOB_STORAGE_CONFIG_ENTRIES.md +14 -0
  36. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_BUCKET.md +14 -0
  37. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PUBLIC_URL.md +14 -0
  38. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_READ_WRITE_TOKEN.md +14 -0
  39. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_REGION.md +14 -0
  40. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_URL.md +14 -0
  41. package/data/packages/platform-blob-storage/api/Variable.VERCEL_CONFIG_ENTRIES.md +14 -0
  42. package/data/packages/platform-blob-storage/api/index.md +26 -18
  43. package/data/packages/platform-blob-storage/index.md +104 -68
  44. package/data/packages/platform-bootstrap/api/index.md +0 -2
  45. package/data/packages/platform-core/api/Class.ProblemDetailResponse.md +8 -8
  46. package/data/packages/platform-database/api/Class.DatabaseHealthIndicator.md +4 -4
  47. package/data/packages/platform-database/api/Class.DatabaseModule.md +3 -3
  48. package/data/packages/platform-database/api/Class.DatabaseService.md +12 -11
  49. package/data/packages/platform-database/api/Class.PrismaService.md +6 -5
  50. package/data/packages/platform-database/api/Class.RepositoryBase.md +23 -23
  51. package/data/packages/platform-database/api/Class.RepositoryBase2.md +7 -7
  52. package/data/packages/platform-database/api/Class.RepositoryExceptionFilter.md +2 -2
  53. package/data/packages/platform-database/api/Function.aggregate.md +1 -1
  54. package/data/packages/platform-database/api/Function.aggregateRaw.md +1 -1
  55. package/data/packages/platform-database/api/Function.count.md +1 -1
  56. package/data/packages/platform-database/api/Function.create.md +1 -1
  57. package/data/packages/platform-database/api/Function.createMany.md +1 -1
  58. package/data/packages/platform-database/api/Function.createManyAndReturn.md +1 -1
  59. package/data/packages/platform-database/api/Function.cursorPaginator.md +1 -1
  60. package/data/packages/platform-database/api/Function.findFirst.md +1 -1
  61. package/data/packages/platform-database/api/Function.findFirstOrThrow.md +1 -1
  62. package/data/packages/platform-database/api/Function.findMany.md +1 -1
  63. package/data/packages/platform-database/api/Function.findManyPaged.md +1 -1
  64. package/data/packages/platform-database/api/Function.findRaw.md +1 -1
  65. package/data/packages/platform-database/api/Function.findUnique.md +1 -1
  66. package/data/packages/platform-database/api/Function.findUniqueOrThrow.md +1 -1
  67. package/data/packages/platform-database/api/Function.groupBy.md +1 -1
  68. package/data/packages/platform-database/api/Function.pageable.md +1 -1
  69. package/data/packages/platform-database/api/Function.paginator.md +1 -1
  70. package/data/packages/platform-database/api/Function.pipe.md +1 -1
  71. package/data/packages/platform-database/api/Function.pipeAll.md +1 -1
  72. package/data/packages/platform-database/api/Function.query.md +1 -1
  73. package/data/packages/platform-database/api/Function.query2.md +1 -1
  74. package/data/packages/platform-database/api/Function.remove.md +1 -1
  75. package/data/packages/platform-database/api/Function.removeMany.md +1 -1
  76. package/data/packages/platform-database/api/Function.skip.md +1 -1
  77. package/data/packages/platform-database/api/Function.transactionalQuery.md +1 -1
  78. package/data/packages/platform-database/api/Function.update.md +1 -1
  79. package/data/packages/platform-database/api/Function.updateMany.md +1 -1
  80. package/data/packages/platform-database/api/Function.updateManyAndReturn.md +1 -1
  81. package/data/packages/platform-database/api/Function.upsert.md +1 -1
  82. package/data/packages/platform-database/api/Interface.ICursorPaginateOptions.md +4 -4
  83. package/data/packages/platform-database/api/Interface.ICursorPaginatedResult.md +3 -3
  84. package/data/packages/platform-database/api/Interface.IDatabaseModuleConfig.md +3 -3
  85. package/data/packages/platform-database/api/Interface.IPaginateOptions.md +3 -3
  86. package/data/packages/platform-database/api/Interface.IPaginatedResult.md +3 -3
  87. package/data/packages/platform-database/api/Interface.IPrismaServiceOptions.md +2 -2
  88. package/data/packages/platform-database/api/Interface.IRepositoryQuery.md +3 -3
  89. package/data/packages/platform-database/api/Interface.IRepositoryQuery2.md +3 -3
  90. package/data/packages/platform-database/api/Interface.ITransactionalRepositoryQuery.md +4 -4
  91. package/data/packages/platform-database/api/TypeAlias.CursorPaginateFunction.md +1 -1
  92. package/data/packages/platform-database/api/TypeAlias.DelegateArgs.md +1 -1
  93. package/data/packages/platform-database/api/TypeAlias.DelegateOperations.md +1 -1
  94. package/data/packages/platform-database/api/TypeAlias.DelegateReturnTypes.md +1 -1
  95. package/data/packages/platform-database/api/TypeAlias.PaginateFunction.md +1 -1
  96. package/data/packages/platform-database/api/TypeAlias.QueryResultType.md +1 -1
  97. package/data/packages/platform-database/api/TypeAlias.RepositoryOperationsAll.md +1 -1
  98. package/data/packages/platform-database/api/TypeAlias.RepositoryOperationsBase.md +1 -1
  99. package/data/packages/platform-database/api/TypeAlias.TransactionalQueryResultType.md +1 -1
  100. package/data/packages/platform-database/api/Variable.DATABASE_MODULE_CONFIG.md +1 -1
  101. package/data/packages/platform-database/api/Variable.DB_AUTO_CONNECTION.md +1 -1
  102. package/data/packages/platform-database/api/Variable.PLATFORM_DATABASE_CONFIG_ENTRIES.md +1 -1
  103. package/data/packages/platform-payments/api/Class.FeatureAccessPort.md +13 -5
  104. package/data/packages/platform-payments/api/Class.FeatureGuard.md +3 -3
  105. package/data/packages/platform-payments/api/Class.FeatureUsageInterceptor.md +3 -3
  106. package/data/packages/platform-payments/api/Function.RequiresFeature.md +1 -1
  107. package/data/packages/platform-payments/api/Interface.IFeatureAccessContext.md +46 -0
  108. package/data/packages/platform-payments/api/Variable.FEATURE_KEY_METADATA.md +1 -1
  109. package/data/packages/platform-payments/api/index.md +1 -0
  110. package/data/packages/platform-payments/index.md +33 -12
  111. package/data/patterns/guard-pattern.md +27 -6
  112. package/data/patterns/module-pattern.md +6 -2
  113. package/package.json +1 -1
  114. package/data/packages/platform-blob-storage/api/Class.AwsS3BlobProvider.md +0 -196
  115. package/data/packages/platform-blob-storage/api/Class.AzureBlobProvider.md +0 -196
  116. package/data/packages/platform-blob-storage/api/Class.VercelBlobProvider.md +0 -197
  117. package/data/packages/platform-blob-storage/api/Interface.IAwsS3BlobProviderRegistration.md +0 -28
  118. package/data/packages/platform-blob-storage/api/Interface.IAwsS3ProviderOptions.md +0 -68
  119. package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderOptions.md +0 -48
  120. package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderRegistration.md +0 -28
  121. package/data/packages/platform-blob-storage/api/Interface.IBlobProvider.md +0 -114
  122. package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +0 -28
  123. package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderOptions.md +0 -80
  124. package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +0 -28
  125. package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +0 -16
  126. package/data/packages/platform-blob-storage/api/Variable.AWS_S3_PROVIDER_OPTIONS.md +0 -12
  127. package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_PROVIDER_OPTIONS.md +0 -12
  128. package/data/packages/platform-blob-storage/api/Variable.BlobProviderKinds.md +0 -26
  129. package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PROVIDER_OPTIONS.md +0 -12
  130. package/data/packages/platform-bootstrap/api/Function.useExpressServer.md +0 -32
  131. package/data/packages/platform-bootstrap/api/Interface.IExpressServerStepOptions.md +0 -46
@@ -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'` |
@@ -20,7 +20,6 @@ editUrl: false
20
20
  | ------ | ------ |
21
21
  | [IApiStepOptions](Interface.IApiStepOptions) | Options for the generic Archipel API bootstrap step. |
22
22
  | [IApiValidationOptions](Interface.IApiValidationOptions) | Validation options used by the generic Archipel API bootstrap step. |
23
- | [IExpressServerStepOptions](Interface.IExpressServerStepOptions) | Options for the Express-compatible server bootstrap step. |
24
23
  | [IOpenApiStepOptions](Interface.IOpenApiStepOptions) | Options for the OpenAPI bootstrap step. |
25
24
  | [IPlatformApplicationOptions](Interface.IPlatformApplicationOptions) | Options for wrapping an existing NestJS application with Archipel platform bootstrap support. |
26
25
  | [IPlatformListenOptions](Interface.IPlatformListenOptions) | Options for resolving the HTTP listen port from typed configuration keys. |
@@ -59,7 +58,6 @@ editUrl: false
59
58
  | ------ | ------ |
60
59
  | [createPlatformTestApplication](Function.createPlatformTestApplication) | Creates a lightweight in-memory NestJS application double for platform bootstrap tests. |
61
60
  | [useApi](Function.useApi) | Creates the generic Archipel API bootstrap step. |
62
- | [useExpressServer](Function.useExpressServer) | Creates an Express-compatible server bootstrap step. |
63
61
  | [useOpenApi](Function.useOpenApi) | Creates the Archipel OpenAPI multi-document bootstrap step. |
64
62
  | [useSecurity](Function.useSecurity) | Creates the generic security bootstrap step. |
65
63
  | [useSession](Function.useSession) | Creates an Express-compatible session bootstrap step. |
@@ -5,7 +5,7 @@ editUrl: false
5
5
  ---
6
6
  # Class: ProblemDetailResponse
7
7
 
8
- Defined in: models/response/ProblemDetailResponse.ts:29
8
+ Defined in: [models/response/ProblemDetailResponse.ts:29](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L29)
9
9
 
10
10
  OpenAPI schema class representing a Problem Detail response as per RFC 9457.
11
11
 
@@ -46,7 +46,7 @@ new ProblemDetailResponse(): ProblemDetailResponse;
46
46
  optional code?: string;
47
47
  ```
48
48
 
49
- Defined in: models/response/ProblemDetailResponse.ts:81
49
+ Defined in: [models/response/ProblemDetailResponse.ts:81](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L81)
50
50
 
51
51
  ***
52
52
 
@@ -56,7 +56,7 @@ Defined in: models/response/ProblemDetailResponse.ts:81
56
56
  detail: string;
57
57
  ```
58
58
 
59
- Defined in: models/response/ProblemDetailResponse.ts:69
59
+ Defined in: [models/response/ProblemDetailResponse.ts:69](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L69)
60
60
 
61
61
  ***
62
62
 
@@ -66,7 +66,7 @@ Defined in: models/response/ProblemDetailResponse.ts:69
66
66
  optional instance?: string;
67
67
  ```
68
68
 
69
- Defined in: models/response/ProblemDetailResponse.ts:75
69
+ Defined in: [models/response/ProblemDetailResponse.ts:75](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L75)
70
70
 
71
71
  ***
72
72
 
@@ -76,7 +76,7 @@ Defined in: models/response/ProblemDetailResponse.ts:75
76
76
  readonly static MEDIA_TYPE: "application/problem+json" = 'application/problem+json';
77
77
  ```
78
78
 
79
- Defined in: models/response/ProblemDetailResponse.ts:41
79
+ Defined in: [models/response/ProblemDetailResponse.ts:41](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L41)
80
80
 
81
81
  The media type for Problem Detail responses as per RFC 9457.
82
82
 
@@ -92,7 +92,7 @@ response `type`.
92
92
  status: number;
93
93
  ```
94
94
 
95
- Defined in: models/response/ProblemDetailResponse.ts:63
95
+ Defined in: [models/response/ProblemDetailResponse.ts:63](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L63)
96
96
 
97
97
  ***
98
98
 
@@ -102,7 +102,7 @@ Defined in: models/response/ProblemDetailResponse.ts:63
102
102
  title: string;
103
103
  ```
104
104
 
105
- Defined in: models/response/ProblemDetailResponse.ts:57
105
+ Defined in: [models/response/ProblemDetailResponse.ts:57](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L57)
106
106
 
107
107
  ***
108
108
 
@@ -112,4 +112,4 @@ Defined in: models/response/ProblemDetailResponse.ts:57
112
112
  type: string;
113
113
  ```
114
114
 
115
- Defined in: models/response/ProblemDetailResponse.ts:51
115
+ Defined in: [models/response/ProblemDetailResponse.ts:51](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-core/src/models/response/ProblemDetailResponse.ts#L51)
@@ -5,7 +5,7 @@ editUrl: false
5
5
  ---
6
6
  # Class: DatabaseHealthIndicator
7
7
 
8
- Defined in: [health/DatabaseHealthIndicator.ts:16](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L16)
8
+ Defined in: [libs/platform-database/src/health/DatabaseHealthIndicator.ts:16](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L16)
9
9
 
10
10
  Health indicator for database connectivity.
11
11
 
@@ -21,7 +21,7 @@ Health indicator for database connectivity.
21
21
  new DatabaseHealthIndicator(prismaHealthIndicator, databaseService): DatabaseHealthIndicator;
22
22
  ```
23
23
 
24
- Defined in: [health/DatabaseHealthIndicator.ts:26](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L26)
24
+ Defined in: [libs/platform-database/src/health/DatabaseHealthIndicator.ts:26](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L26)
25
25
 
26
26
  #### Parameters
27
27
 
@@ -42,7 +42,7 @@ Defined in: [health/DatabaseHealthIndicator.ts:26](https://github.com/RueDeRenne
42
42
  readonly key: string = 'database';
43
43
  ```
44
44
 
45
- Defined in: [health/DatabaseHealthIndicator.ts:35](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L35)
45
+ Defined in: [libs/platform-database/src/health/DatabaseHealthIndicator.ts:35](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L35)
46
46
 
47
47
  Unique key identifying the indicator
48
48
 
@@ -60,7 +60,7 @@ IHealthIndicator.key
60
60
  check(): Promise<HealthIndicatorResult<"database">>;
61
61
  ```
62
62
 
63
- Defined in: [health/DatabaseHealthIndicator.ts:47](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L47)
63
+ Defined in: [libs/platform-database/src/health/DatabaseHealthIndicator.ts:47](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/health/DatabaseHealthIndicator.ts#L47)
64
64
 
65
65
  Checks database connectivity via a Prisma ping.
66
66
 
@@ -5,7 +5,7 @@ editUrl: false
5
5
  ---
6
6
  # Class: DatabaseModule
7
7
 
8
- Defined in: [DatabaseModule.ts:53](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L53)
8
+ Defined in: [libs/platform-database/src/DatabaseModule.ts:53](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L53)
9
9
 
10
10
  ## Constructors
11
11
 
@@ -27,7 +27,7 @@ new DatabaseModule(): DatabaseModule;
27
27
  static forRoot(config?): DynamicModule;
28
28
  ```
29
29
 
30
- Defined in: [DatabaseModule.ts:62](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L62)
30
+ Defined in: [libs/platform-database/src/DatabaseModule.ts:62](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L62)
31
31
 
32
32
  Registers the `DatabaseModule` with global middlewares.
33
33
 
@@ -51,7 +51,7 @@ A `DynamicModule` that can be imported globally
51
51
  static register(config?): DynamicModule;
52
52
  ```
53
53
 
54
- Defined in: [DatabaseModule.ts:82](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L82)
54
+ Defined in: [libs/platform-database/src/DatabaseModule.ts:82](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/DatabaseModule.ts#L82)
55
55
 
56
56
  Registers the `DatabaseModule` with dynamic middlewares.
57
57
 
@@ -5,7 +5,7 @@ editUrl: false
5
5
  ---
6
6
  # Class: DatabaseService
7
7
 
8
- Defined in: [services/DatabaseService.ts:16](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L16)
8
+ Defined in: [libs/platform-database/src/services/DatabaseService.ts:16](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L16)
9
9
 
10
10
  Represents the database service.
11
11
 
@@ -16,7 +16,8 @@ Represents the database service.
16
16
  ## Indexable
17
17
 
18
18
  ```ts
19
- [key: string]: any
19
+ [K: symbol]: {
20
+ }
20
21
  ```
21
22
 
22
23
  ## Constructors
@@ -27,7 +28,7 @@ Represents the database service.
27
28
  new DatabaseService(configService, options?): DatabaseService;
28
29
  ```
29
30
 
30
- Defined in: [services/DatabaseService.ts:24](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L24)
31
+ Defined in: [libs/platform-database/src/services/DatabaseService.ts:24](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L24)
31
32
 
32
33
  Constructs a new instance of the `DatabaseService` class.
33
34
 
@@ -54,7 +55,7 @@ Constructs a new instance of the `DatabaseService` class.
54
55
  onModuleDestroy(): Promise<void>;
55
56
  ```
56
57
 
57
- Defined in: [services/PrismaService.ts:69](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L69)
58
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:69](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L69)
58
59
 
59
60
  #### Returns
60
61
 
@@ -72,7 +73,7 @@ Defined in: [services/PrismaService.ts:69](https://github.com/RueDeRennes/archip
72
73
  onModuleInit(): Promise<void>;
73
74
  ```
74
75
 
75
- Defined in: [services/PrismaService.ts:58](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L58)
76
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:58](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L58)
76
77
 
77
78
  #### Returns
78
79
 
@@ -87,10 +88,10 @@ Defined in: [services/PrismaService.ts:58](https://github.com/RueDeRennes/archip
87
88
  ### transaction()
88
89
 
89
90
  ```ts
90
- transaction<P>(arg, options?): any;
91
+ transaction<P>(arg, options?): Promise<unknown>;
91
92
  ```
92
93
 
93
- Defined in: [services/DatabaseService.ts:40](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L40)
94
+ Defined in: [libs/platform-database/src/services/DatabaseService.ts:40](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L40)
94
95
 
95
96
  Creates a new transaction.
96
97
 
@@ -105,11 +106,11 @@ Creates a new transaction.
105
106
  | Parameter | Type | Description |
106
107
  | ------ | ------ | ------ |
107
108
  | `arg` | \[`...P[]`\] | The argument. |
108
- | `options?` | `unknown` | The options. |
109
+ | `options?` | \{ \} | The options. |
109
110
 
110
111
  #### Returns
111
112
 
112
- `any`
113
+ `Promise`\<`unknown`\>
113
114
 
114
115
  Returns the result of the transaction.
115
116
 
@@ -121,7 +122,7 @@ Returns the result of the transaction.
121
122
  transactionCallback<T>(fn, options?): Promise<T>;
122
123
  ```
123
124
 
124
- Defined in: [services/DatabaseService.ts:55](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L55)
125
+ Defined in: [libs/platform-database/src/services/DatabaseService.ts:55](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/DatabaseService.ts#L55)
125
126
 
126
127
  Executes a transactional callback (extended overload missing in base typing wrapper).
127
128
 
@@ -136,7 +137,7 @@ Executes a transactional callback (extended overload missing in base typing wrap
136
137
  | Parameter | Type |
137
138
  | ------ | ------ |
138
139
  | `fn` | (`tx`) => `Promise`\<`T`\> |
139
- | `options?` | `unknown` |
140
+ | `options?` | \{ \} |
140
141
 
141
142
  #### Returns
142
143
 
@@ -5,7 +5,7 @@ editUrl: false
5
5
  ---
6
6
  # Class: PrismaService
7
7
 
8
- Defined in: [services/PrismaService.ts:29](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L29)
8
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:29](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L29)
9
9
 
10
10
  Represents the prisma service.
11
11
 
@@ -25,7 +25,8 @@ Represents the prisma service.
25
25
  ## Indexable
26
26
 
27
27
  ```ts
28
- [key: string]: any
28
+ [K: symbol]: {
29
+ }
29
30
  ```
30
31
 
31
32
  ## Constructors
@@ -36,7 +37,7 @@ Represents the prisma service.
36
37
  new PrismaService(configService, options?): PrismaService;
37
38
  ```
38
39
 
39
- Defined in: [services/PrismaService.ts:43](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L43)
40
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:43](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L43)
40
41
 
41
42
  Constructs a new instance of the `PrismaService` class.
42
43
 
@@ -65,7 +66,7 @@ PrismaClient.constructor
65
66
  onModuleDestroy(): Promise<void>;
66
67
  ```
67
68
 
68
- Defined in: [services/PrismaService.ts:69](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L69)
69
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:69](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L69)
69
70
 
70
71
  #### Returns
71
72
 
@@ -85,7 +86,7 @@ OnModuleDestroy.onModuleDestroy
85
86
  onModuleInit(): Promise<void>;
86
87
  ```
87
88
 
88
- Defined in: [services/PrismaService.ts:58](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L58)
89
+ Defined in: [libs/platform-database/src/services/PrismaService.ts:58](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-database/src/services/PrismaService.ts#L58)
89
90
 
90
91
  #### Returns
91
92