@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.
- package/data/guides/blob-storage.md +20 -16
- package/data/guides/implementing-ports.md +2 -0
- package/data/guides/payments-and-feature-gating.md +76 -45
- package/data/packages/platform-blob-storage/api/Class.AwsS3BlobStorageStrategy.md +197 -0
- package/data/packages/platform-blob-storage/api/Class.AzureBlobStorageStrategy.md +197 -0
- package/data/packages/platform-blob-storage/api/Class.BlobModule.md +20 -10
- package/data/packages/platform-blob-storage/api/Class.BlobService.md +8 -8
- package/data/packages/platform-blob-storage/api/Class.BlobStorageStrategyBase.md +158 -0
- package/data/packages/platform-blob-storage/api/Class.LocalBlobStorageStrategy.md +197 -0
- package/data/packages/platform-blob-storage/api/Class.VercelBlobStorageStrategy.md +198 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobDeleteRequest.md +4 -4
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadRequest.md +5 -5
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadResult.md +6 -6
- package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +20 -10
- package/data/packages/platform-blob-storage/api/Interface.IBlobObjectMetadata.md +14 -14
- package/data/packages/platform-blob-storage/api/Interface.IBlobSignedUrlRequest.md +5 -5
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadRequest.md +10 -10
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadResult.md +3 -3
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobDownloadResponseType.md +1 -1
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobUploadBody.md +1 -1
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ACCESS_KEY_ID.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_BUCKET.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_ENDPOINT.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_REGION.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_SECRET_ACCESS_KEY.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONNECTION_STRING.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_CONTAINER_NAME.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.AZURE_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-blob-storage/api/{Variable.BLOB_PROVIDER.md → Variable.BLOB_STORAGE_STRATEGY_TOKEN.md} +3 -3
- package/data/packages/platform-blob-storage/api/Variable.BlobDownloadResponseTypes.md +5 -5
- package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BASE_PATH.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.LOCAL_BLOB_BUCKET.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.LOCAL_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.PLATFORM_BLOB_STORAGE_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_BUCKET.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PUBLIC_URL.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_READ_WRITE_TOKEN.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_REGION.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_URL.md +14 -0
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-blob-storage/api/index.md +26 -18
- package/data/packages/platform-blob-storage/index.md +104 -68
- package/data/packages/platform-bootstrap/api/index.md +0 -2
- package/data/packages/platform-core/api/Class.ProblemDetailResponse.md +8 -8
- package/data/packages/platform-database/api/Class.DatabaseHealthIndicator.md +4 -4
- package/data/packages/platform-database/api/Class.DatabaseModule.md +3 -3
- package/data/packages/platform-database/api/Class.DatabaseService.md +12 -11
- package/data/packages/platform-database/api/Class.PrismaService.md +6 -5
- package/data/packages/platform-database/api/Class.RepositoryBase.md +23 -23
- package/data/packages/platform-database/api/Class.RepositoryBase2.md +7 -7
- package/data/packages/platform-database/api/Class.RepositoryExceptionFilter.md +2 -2
- package/data/packages/platform-database/api/Function.aggregate.md +1 -1
- package/data/packages/platform-database/api/Function.aggregateRaw.md +1 -1
- package/data/packages/platform-database/api/Function.count.md +1 -1
- package/data/packages/platform-database/api/Function.create.md +1 -1
- package/data/packages/platform-database/api/Function.createMany.md +1 -1
- package/data/packages/platform-database/api/Function.createManyAndReturn.md +1 -1
- package/data/packages/platform-database/api/Function.cursorPaginator.md +1 -1
- package/data/packages/platform-database/api/Function.findFirst.md +1 -1
- package/data/packages/platform-database/api/Function.findFirstOrThrow.md +1 -1
- package/data/packages/platform-database/api/Function.findMany.md +1 -1
- package/data/packages/platform-database/api/Function.findManyPaged.md +1 -1
- package/data/packages/platform-database/api/Function.findRaw.md +1 -1
- package/data/packages/platform-database/api/Function.findUnique.md +1 -1
- package/data/packages/platform-database/api/Function.findUniqueOrThrow.md +1 -1
- package/data/packages/platform-database/api/Function.groupBy.md +1 -1
- package/data/packages/platform-database/api/Function.pageable.md +1 -1
- package/data/packages/platform-database/api/Function.paginator.md +1 -1
- package/data/packages/platform-database/api/Function.pipe.md +1 -1
- package/data/packages/platform-database/api/Function.pipeAll.md +1 -1
- package/data/packages/platform-database/api/Function.query.md +1 -1
- package/data/packages/platform-database/api/Function.query2.md +1 -1
- package/data/packages/platform-database/api/Function.remove.md +1 -1
- package/data/packages/platform-database/api/Function.removeMany.md +1 -1
- package/data/packages/platform-database/api/Function.skip.md +1 -1
- package/data/packages/platform-database/api/Function.transactionalQuery.md +1 -1
- package/data/packages/platform-database/api/Function.update.md +1 -1
- package/data/packages/platform-database/api/Function.updateMany.md +1 -1
- package/data/packages/platform-database/api/Function.updateManyAndReturn.md +1 -1
- package/data/packages/platform-database/api/Function.upsert.md +1 -1
- package/data/packages/platform-database/api/Interface.ICursorPaginateOptions.md +4 -4
- package/data/packages/platform-database/api/Interface.ICursorPaginatedResult.md +3 -3
- package/data/packages/platform-database/api/Interface.IDatabaseModuleConfig.md +3 -3
- package/data/packages/platform-database/api/Interface.IPaginateOptions.md +3 -3
- package/data/packages/platform-database/api/Interface.IPaginatedResult.md +3 -3
- package/data/packages/platform-database/api/Interface.IPrismaServiceOptions.md +2 -2
- package/data/packages/platform-database/api/Interface.IRepositoryQuery.md +3 -3
- package/data/packages/platform-database/api/Interface.IRepositoryQuery2.md +3 -3
- package/data/packages/platform-database/api/Interface.ITransactionalRepositoryQuery.md +4 -4
- package/data/packages/platform-database/api/TypeAlias.CursorPaginateFunction.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.DelegateArgs.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.DelegateOperations.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.DelegateReturnTypes.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.PaginateFunction.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.QueryResultType.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.RepositoryOperationsAll.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.RepositoryOperationsBase.md +1 -1
- package/data/packages/platform-database/api/TypeAlias.TransactionalQueryResultType.md +1 -1
- package/data/packages/platform-database/api/Variable.DATABASE_MODULE_CONFIG.md +1 -1
- package/data/packages/platform-database/api/Variable.DB_AUTO_CONNECTION.md +1 -1
- package/data/packages/platform-database/api/Variable.PLATFORM_DATABASE_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-payments/api/Class.FeatureAccessPort.md +13 -5
- package/data/packages/platform-payments/api/Class.FeatureGuard.md +3 -3
- package/data/packages/platform-payments/api/Class.FeatureUsageInterceptor.md +3 -3
- package/data/packages/platform-payments/api/Function.RequiresFeature.md +1 -1
- package/data/packages/platform-payments/api/Interface.IFeatureAccessContext.md +46 -0
- package/data/packages/platform-payments/api/Variable.FEATURE_KEY_METADATA.md +1 -1
- package/data/packages/platform-payments/api/index.md +1 -0
- package/data/packages/platform-payments/index.md +33 -12
- package/data/patterns/guard-pattern.md +27 -6
- package/data/patterns/module-pattern.md +6 -2
- package/package.json +1 -1
- package/data/packages/platform-blob-storage/api/Class.AwsS3BlobProvider.md +0 -196
- package/data/packages/platform-blob-storage/api/Class.AzureBlobProvider.md +0 -196
- package/data/packages/platform-blob-storage/api/Class.VercelBlobProvider.md +0 -197
- package/data/packages/platform-blob-storage/api/Interface.IAwsS3BlobProviderRegistration.md +0 -28
- package/data/packages/platform-blob-storage/api/Interface.IAwsS3ProviderOptions.md +0 -68
- package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderOptions.md +0 -48
- package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderRegistration.md +0 -28
- package/data/packages/platform-blob-storage/api/Interface.IBlobProvider.md +0 -114
- package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +0 -28
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderOptions.md +0 -80
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +0 -28
- package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +0 -16
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_PROVIDER_OPTIONS.md +0 -12
- package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_PROVIDER_OPTIONS.md +0 -12
- package/data/packages/platform-blob-storage/api/Variable.BlobProviderKinds.md +0 -26
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PROVIDER_OPTIONS.md +0 -12
- package/data/packages/platform-bootstrap/api/Function.useExpressServer.md +0 -32
- package/data/packages/platform-bootstrap/api/Interface.IExpressServerStepOptions.md +0 -46
|
@@ -314,15 +314,30 @@ type SubscriptionStatus =
|
|
|
314
314
|
|
|
315
315
|
## FeatureAccessPort
|
|
316
316
|
|
|
317
|
-
Abstract port for checking feature quotas and recording usage. This enables feature-gating with any billing system.
|
|
317
|
+
Abstract port for checking feature quotas and recording usage. This enables feature-gating with any billing system and optional request-scoped tenancy context.
|
|
318
318
|
|
|
319
319
|
```typescript
|
|
320
320
|
abstract class FeatureAccessPort {
|
|
321
|
-
abstract checkAccess(
|
|
322
|
-
|
|
321
|
+
abstract checkAccess(
|
|
322
|
+
userId: string,
|
|
323
|
+
featureKey: string,
|
|
324
|
+
context?: IFeatureAccessContext,
|
|
325
|
+
): Promise<IFeatureAccessResult>;
|
|
326
|
+
|
|
327
|
+
abstract recordUsage(userId: string, featureKey: string, context?: IFeatureAccessContext): Promise<void>;
|
|
323
328
|
}
|
|
324
329
|
```
|
|
325
330
|
|
|
331
|
+
`FeatureGuard` and `FeatureUsageInterceptor` create `IFeatureAccessContext` from the authenticated request subject. The guard resolves `request.user.id`, converts numeric ids to strings, forwards `request.user.tenantId` when present, and includes the original subject for adapters that need additional claims.
|
|
332
|
+
|
|
333
|
+
### IFeatureAccessContext
|
|
334
|
+
|
|
335
|
+
| Field | Type | Description |
|
|
336
|
+
| ---------- | -------------------- | ---------------------------------------------------------- |
|
|
337
|
+
| `userId` | `string` | Authenticated user identifier resolved from `request.user` |
|
|
338
|
+
| `tenantId` | `string \| number` | Optional tenant identifier from the authenticated subject |
|
|
339
|
+
| `subject` | `unknown` | Original authenticated subject from the request |
|
|
340
|
+
|
|
326
341
|
### IFeatureAccessResult
|
|
327
342
|
|
|
328
343
|
| Field | Type | Description |
|
|
@@ -345,9 +360,13 @@ export class PrismaFeatureAccessAdapter extends FeatureAccessPort {
|
|
|
345
360
|
this._prisma = prisma;
|
|
346
361
|
}
|
|
347
362
|
|
|
348
|
-
public async checkAccess(
|
|
363
|
+
public async checkAccess(
|
|
364
|
+
userId: string,
|
|
365
|
+
featureKey: string,
|
|
366
|
+
context?: IFeatureAccessContext,
|
|
367
|
+
): Promise<IFeatureAccessResult> {
|
|
349
368
|
const subscription = await this._prisma.subscription.findFirst({
|
|
350
|
-
where: { userId, status: 'active' },
|
|
369
|
+
where: { userId, tenantId: context?.tenantId, status: 'active' },
|
|
351
370
|
include: { plan: { include: { features: true } } },
|
|
352
371
|
});
|
|
353
372
|
|
|
@@ -360,6 +379,7 @@ export class PrismaFeatureAccessAdapter extends FeatureAccessPort {
|
|
|
360
379
|
const usage = await this._prisma.featureUsage.count({
|
|
361
380
|
where: {
|
|
362
381
|
userId,
|
|
382
|
+
tenantId: context?.tenantId,
|
|
363
383
|
featureKey,
|
|
364
384
|
createdAt: { gte: periodStart },
|
|
365
385
|
},
|
|
@@ -377,14 +397,14 @@ export class PrismaFeatureAccessAdapter extends FeatureAccessPort {
|
|
|
377
397
|
};
|
|
378
398
|
}
|
|
379
399
|
|
|
380
|
-
public async recordUsage(userId: string, featureKey: string): Promise<void> {
|
|
381
|
-
const access = await this.checkAccess(userId, featureKey);
|
|
400
|
+
public async recordUsage(userId: string, featureKey: string, context?: IFeatureAccessContext): Promise<void> {
|
|
401
|
+
const access = await this.checkAccess(userId, featureKey, context);
|
|
382
402
|
if (!access.allowed) {
|
|
383
403
|
throw new Error(`Feature quota exceeded for ${featureKey}`);
|
|
384
404
|
}
|
|
385
405
|
|
|
386
406
|
await this._prisma.featureUsage.create({
|
|
387
|
-
data: { userId, featureKey },
|
|
407
|
+
data: { userId, tenantId: context?.tenantId, featureKey },
|
|
388
408
|
});
|
|
389
409
|
}
|
|
390
410
|
|
|
@@ -417,7 +437,7 @@ export class RecipeController {
|
|
|
417
437
|
|
|
418
438
|
### FeatureGuard
|
|
419
439
|
|
|
420
|
-
Checks the `@RequiresFeature` metadata against `FeatureAccessPort.checkAccess()`. Apply
|
|
440
|
+
Checks the `@RequiresFeature` metadata against `FeatureAccessPort.checkAccess()`. Metadata is resolved from route handlers first and controller classes second. Apply the guard globally or per-controller:
|
|
421
441
|
|
|
422
442
|
```typescript
|
|
423
443
|
// Global registration
|
|
@@ -431,7 +451,7 @@ export class RecipeController {
|
|
|
431
451
|
}
|
|
432
452
|
```
|
|
433
453
|
|
|
434
|
-
The guard attaches the `IFeatureAccessResult` to the request as `request.featureAccess`, enabling downstream access to quota information.
|
|
454
|
+
The guard passes `IFeatureAccessContext` into the access port and attaches the `IFeatureAccessResult` to the request as `request.featureAccess`, enabling downstream access to quota information.
|
|
435
455
|
|
|
436
456
|
### FeatureUsageInterceptor
|
|
437
457
|
|
|
@@ -446,7 +466,7 @@ export class RecipeController {
|
|
|
446
466
|
@RequiresFeature('RECIPE_CREATION')
|
|
447
467
|
public async createRecipe(@Body() body: CreateRecipeDto): Promise<RecipeResponse> {
|
|
448
468
|
// After successful response, FeatureUsageInterceptor calls
|
|
449
|
-
// FeatureAccessPort.recordUsage(userId, 'RECIPE_CREATION')
|
|
469
|
+
// FeatureAccessPort.recordUsage(userId, 'RECIPE_CREATION', context)
|
|
450
470
|
}
|
|
451
471
|
}
|
|
452
472
|
```
|
|
@@ -514,7 +534,7 @@ All payment clients throw a `PaymentError` when provider operations fail (checko
|
|
|
514
534
|
import { PaymentError } from '@breadstone/archipel-platform-payments';
|
|
515
535
|
|
|
516
536
|
try {
|
|
517
|
-
await this._paymentClient.createCheckoutSession(
|
|
537
|
+
await this._paymentClient.createCheckoutSession(priceId, successUrl, cancelUrl, userId);
|
|
518
538
|
} catch (error) {
|
|
519
539
|
if (error instanceof PaymentError) {
|
|
520
540
|
logger.error('Payment operation failed', {
|
|
@@ -566,6 +586,7 @@ export class AppModule {}
|
|
|
566
586
|
| `PaymentModule` | NestJS Module | Main module with `register()` |
|
|
567
587
|
| `PaymentClientPort` | Abstract Port | Provider-agnostic payment contract |
|
|
568
588
|
| `FeatureAccessPort` | Abstract Port | Feature quota checking |
|
|
589
|
+
| `IFeatureAccessContext` | Interface | Request-scoped access context |
|
|
569
590
|
| `IFeatureAccessResult` | Interface | Quota check result |
|
|
570
591
|
| `FeatureGuard` | Guard | Enforces `@RequiresFeature` |
|
|
571
592
|
| `FeatureUsageInterceptor` | Interceptor | Records feature usage |
|
|
@@ -53,6 +53,7 @@ export const RequiresFeature = (featureKey: string) =>
|
|
|
53
53
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
|
54
54
|
import { Reflector } from '@nestjs/core';
|
|
55
55
|
import { FeatureAccessPort } from '../contracts/FeatureAccessPort';
|
|
56
|
+
import type { IFeatureAccessContext } from '../contracts/IFeatureAccessContext';
|
|
56
57
|
|
|
57
58
|
@Injectable()
|
|
58
59
|
export class FeatureGuard implements CanActivate {
|
|
@@ -76,7 +77,10 @@ export class FeatureGuard implements CanActivate {
|
|
|
76
77
|
// #region Methods
|
|
77
78
|
|
|
78
79
|
public async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
79
|
-
const featureKey = this._reflector.
|
|
80
|
+
const featureKey = this._reflector.getAllAndOverride<string | undefined>(FEATURE_KEY_METADATA, [
|
|
81
|
+
context.getHandler(),
|
|
82
|
+
context.getClass(),
|
|
83
|
+
]);
|
|
80
84
|
|
|
81
85
|
if (!featureKey) {
|
|
82
86
|
return true; // No feature requirement on this endpoint
|
|
@@ -84,12 +88,18 @@ export class FeatureGuard implements CanActivate {
|
|
|
84
88
|
|
|
85
89
|
const request = context.switchToHttp().getRequest();
|
|
86
90
|
const user = request.user;
|
|
91
|
+
const userId = typeof user?.id === 'number' ? String(user.id) : user?.id;
|
|
87
92
|
|
|
88
|
-
if (!
|
|
93
|
+
if (!userId) {
|
|
89
94
|
return false;
|
|
90
95
|
}
|
|
91
96
|
|
|
92
|
-
const
|
|
97
|
+
const accessContext: IFeatureAccessContext = {
|
|
98
|
+
userId,
|
|
99
|
+
tenantId: user?.tenantId,
|
|
100
|
+
subject: user,
|
|
101
|
+
};
|
|
102
|
+
const access = await this._featureAccessPort.checkAccess(userId, featureKey, accessContext);
|
|
93
103
|
request.featureAccess = access; // Attach for downstream use
|
|
94
104
|
|
|
95
105
|
return access.allowed;
|
|
@@ -130,7 +140,10 @@ export class FeatureUsageInterceptor implements NestInterceptor {
|
|
|
130
140
|
// #region Methods
|
|
131
141
|
|
|
132
142
|
public intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
|
|
133
|
-
const featureKey = this._reflector.
|
|
143
|
+
const featureKey = this._reflector.getAllAndOverride<string | undefined>(FEATURE_KEY_METADATA, [
|
|
144
|
+
context.getHandler(),
|
|
145
|
+
context.getClass(),
|
|
146
|
+
]);
|
|
134
147
|
|
|
135
148
|
if (!featureKey) {
|
|
136
149
|
return next.handle();
|
|
@@ -138,11 +151,17 @@ export class FeatureUsageInterceptor implements NestInterceptor {
|
|
|
138
151
|
|
|
139
152
|
const request = context.switchToHttp().getRequest();
|
|
140
153
|
const user = request.user;
|
|
154
|
+
const userId = typeof user?.id === 'number' ? String(user.id) : user?.id;
|
|
141
155
|
|
|
142
156
|
return next.handle().pipe(
|
|
143
157
|
tap(async () => {
|
|
144
|
-
if (
|
|
145
|
-
|
|
158
|
+
if (userId) {
|
|
159
|
+
const accessContext: IFeatureAccessContext = {
|
|
160
|
+
userId,
|
|
161
|
+
tenantId: user?.tenantId,
|
|
162
|
+
subject: user,
|
|
163
|
+
};
|
|
164
|
+
await this._featureAccessPort.recordUsage(userId, featureKey, accessContext);
|
|
146
165
|
}
|
|
147
166
|
}),
|
|
148
167
|
);
|
|
@@ -153,6 +172,8 @@ export class FeatureUsageInterceptor implements NestInterceptor {
|
|
|
153
172
|
}
|
|
154
173
|
```
|
|
155
174
|
|
|
175
|
+
The context object lets adapters evaluate tenant-specific plans or inspect claims from the authenticated subject without pushing billing concerns into controllers.
|
|
176
|
+
|
|
156
177
|
### Step 4: Controller Usage
|
|
157
178
|
|
|
158
179
|
```typescript
|
|
@@ -24,9 +24,13 @@ full customization through dependency injection.
|
|
|
24
24
|
|
|
25
25
|
export abstract class FeatureAccessPort {
|
|
26
26
|
|
|
27
|
-
public abstract checkAccess(
|
|
27
|
+
public abstract checkAccess(
|
|
28
|
+
userId: string,
|
|
29
|
+
featureKey: string,
|
|
30
|
+
context?: IFeatureAccessContext,
|
|
31
|
+
): Promise<IFeatureAccessResult>;
|
|
28
32
|
|
|
29
|
-
public abstract recordUsage(userId: string, featureKey: string): Promise<void>;
|
|
33
|
+
public abstract recordUsage(userId: string, featureKey: string, context?: IFeatureAccessContext): Promise<void>;
|
|
30
34
|
|
|
31
35
|
}
|
|
32
36
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@breadstone/archipel-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
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)
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 'Class: AzureBlobProvider'
|
|
3
|
-
generated: true
|
|
4
|
-
editUrl: false
|
|
5
|
-
---
|
|
6
|
-
# Class: AzureBlobProvider
|
|
7
|
-
|
|
8
|
-
Defined in: [providers/AzureBlobProvider.ts:35](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L35)
|
|
9
|
-
|
|
10
|
-
Provides an implementation of [IBlobProvider](Interface.IBlobProvider) for Microsoft Azure Blob Storage.
|
|
11
|
-
|
|
12
|
-
## Implements
|
|
13
|
-
|
|
14
|
-
- [`IBlobProvider`](Interface.IBlobProvider)
|
|
15
|
-
|
|
16
|
-
## Constructors
|
|
17
|
-
|
|
18
|
-
### Constructor
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
new AzureBlobProvider(options): AzureBlobProvider;
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Defined in: [providers/AzureBlobProvider.ts:53](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L53)
|
|
25
|
-
|
|
26
|
-
Initializes a new instance of the AzureBlobProvider class.
|
|
27
|
-
|
|
28
|
-
#### Parameters
|
|
29
|
-
|
|
30
|
-
| Parameter | Type | Description |
|
|
31
|
-
| ------ | ------ | ------ |
|
|
32
|
-
| `options` | [`IAzureBlobProviderOptions`](Interface.IAzureBlobProviderOptions) | The provider configuration options. |
|
|
33
|
-
|
|
34
|
-
#### Returns
|
|
35
|
-
|
|
36
|
-
`AzureBlobProvider`
|
|
37
|
-
|
|
38
|
-
## Accessors
|
|
39
|
-
|
|
40
|
-
### defaultBucket
|
|
41
|
-
|
|
42
|
-
#### Get Signature
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
get defaultBucket(): string;
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Defined in: [providers/AzureBlobProvider.ts:84](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L84)
|
|
49
|
-
|
|
50
|
-
Gets the default bucket (container) 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/AzureBlobProvider.ts:77](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L77)
|
|
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/AzureBlobProvider.ts:194](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L194)
|
|
91
|
-
|
|
92
|
-
Creates a SAS-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 SAS 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/AzureBlobProvider.ts:175](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L175)
|
|
119
|
-
|
|
120
|
-
Deletes a blob object from Azure Blob Storage.
|
|
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/AzureBlobProvider.ts:147](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L147)
|
|
145
|
-
|
|
146
|
-
Downloads a blob object from Azure Blob Storage.
|
|
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/AzureBlobProvider.ts:99](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-blob-storage/src/providers/AzureBlobProvider.ts#L99)
|
|
179
|
-
|
|
180
|
-
Uploads a blob object to Azure Blob Storage.
|
|
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)
|