@breadstone/archipel-mcp 0.0.22 → 0.0.25
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/README.md +32 -13
- package/data/guides/ai-text-generation.md +16 -24
- package/data/guides/caching.md +33 -0
- package/data/guides/email-delivery.md +27 -1
- package/data/guides/email-templates.md +49 -39
- package/data/guides/esigning-integration.md +11 -5
- package/data/guides/health-indicators.md +220 -0
- package/data/guides/index.md +2 -0
- package/data/guides/queue-infrastructure.md +329 -0
- package/data/guides/telemetry-and-observability.md +20 -0
- package/data/packages/platform-analytics/api/Class.AnalyticsClientPort.md +20 -0
- package/data/packages/platform-analytics/api/Class.AnalyticsHealthIndicator.md +78 -0
- package/data/packages/platform-analytics/api/Class.AppInsightsAnalyticsClient.md +24 -0
- package/data/packages/platform-analytics/api/Class.DatadogAnalyticsClient.md +24 -0
- package/data/packages/platform-analytics/api/Class.NoopAnalyticsClient.md +24 -0
- package/data/packages/platform-analytics/api/Class.SentryAnalyticsClient.md +24 -0
- package/data/packages/platform-analytics/api/index.md +1 -0
- package/data/packages/platform-analytics/index.md +25 -1
- package/data/packages/platform-authentication/api/Class.AuthenticationHealthIndicator.md +68 -0
- package/data/packages/platform-authentication/api/Interface.IMfaSubjectUpdate.md +1 -1
- package/data/packages/platform-authentication/api/index.md +2 -1
- package/data/packages/platform-authentication/index.md +25 -1
- package/data/packages/platform-blob-storage/api/Class.BlobHealthIndicator.md +7 -7
- package/data/packages/platform-blob-storage/api/Class.BlobModule.md +2 -2
- package/data/packages/platform-blob-storage/api/Interface.IAwsS3BlobProviderRegistration.md +3 -3
- package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderRegistration.md +3 -3
- package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +5 -5
- package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +3 -3
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +3 -3
- package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +1 -1
- package/data/packages/platform-blob-storage/api/index.md +1 -1
- package/data/packages/platform-blob-storage/index.md +19 -14
- package/data/packages/platform-caching/api/Class.MemoryLayeredCache.md +10 -10
- package/data/packages/platform-caching/api/Class.NoopCacheMetricsRecorder.md +6 -6
- package/data/packages/platform-caching/api/Class.RedisLayeredCache.md +13 -13
- package/data/packages/platform-caching/api/Interface.ILayeredCache.md +9 -9
- package/data/packages/platform-caching/api/Interface.ILayeredCacheOptions.md +6 -6
- package/data/packages/platform-caching/api/Variable.CACHE_DEFAULT_TTL_MS.md +14 -0
- package/data/packages/platform-caching/api/Variable.CACHE_MAX_ENTRIES.md +14 -0
- package/data/packages/platform-caching/api/Variable.CACHE_STALE_WHILE_REVALIDATE.md +14 -0
- package/data/packages/platform-caching/api/Variable.PLATFORM_CACHING_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-caching/api/Variable.REDIS_CONFIG_ENTRIES.md +14 -0
- package/data/packages/platform-caching/api/Variable.REDIS_KEY_PREFIX.md +14 -0
- package/data/packages/platform-caching/api/Variable.REDIS_TTL_SECONDS.md +14 -0
- package/data/packages/platform-caching/api/Variable.REDIS_URL.md +14 -0
- package/data/packages/platform-caching/api/index.md +13 -0
- package/data/packages/platform-caching/index.md +47 -1
- package/data/packages/platform-configuration/api/Function.createConfigKey.md +1 -1
- package/data/packages/platform-core/api/Class.HttpLoggerMiddleware.md +3 -3
- package/data/packages/platform-core/api/Function.maskSensitive.md +26 -0
- package/data/packages/platform-core/api/Function.maskSensitiveFields.md +26 -0
- package/data/packages/platform-core/api/index.md +2 -0
- package/data/packages/platform-core/index.md +11 -0
- package/data/packages/platform-database/api/Class.DatabaseHealthIndicator.md +8 -6
- package/data/packages/platform-database/api/Class.DatabaseModule.md +3 -3
- package/data/packages/platform-database/api/Class.RepositoryBase.md +20 -20
- package/data/packages/platform-database/api/Function.paginator.md +1 -1
- package/data/packages/platform-database/api/Interface.IDatabaseModuleConfig.md +3 -3
- package/data/packages/platform-database/api/TypeAlias.DelegateArgs.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/Variable.DATABASE_MODULE_CONFIG.md +1 -1
- package/data/packages/platform-database/index.md +17 -5
- package/data/packages/platform-documents/api/Class.DocumentEngine.md +9 -5
- package/data/packages/platform-documents/index.md +1 -1
- package/data/packages/platform-esigning/api/Class.AdobeSignEsigningProvider.md +24 -0
- package/data/packages/platform-esigning/api/Class.DocuSignEsigningProvider.md +24 -0
- package/data/packages/platform-esigning/api/Class.DropboxSignEsigningProvider.md +24 -0
- package/data/packages/platform-esigning/api/Class.EsigningClientPort.md +20 -0
- package/data/packages/platform-esigning/api/Class.EsigningHealthIndicator.md +78 -0
- package/data/packages/platform-esigning/api/Class.InternalEsigningProvider.md +24 -0
- package/data/packages/platform-esigning/api/index.md +1 -0
- package/data/packages/platform-esigning/index.md +26 -2
- package/data/packages/platform-health/api/Class.HealthModule.md +42 -0
- package/data/packages/platform-health/api/Class.HealthOrchestrator.md +64 -0
- package/data/packages/platform-health/api/Interface.IHealthCheckResult.md +46 -0
- package/data/packages/platform-health/api/Interface.IHealthIndicator.md +41 -0
- package/data/packages/platform-health/api/Variable.HEALTH_INDICATORS_TOKEN.md +14 -0
- package/data/packages/platform-health/api/index.md +26 -0
- package/data/packages/platform-health/index.md +19 -8
- package/data/packages/platform-intelligence/api/Class.IntelligenceHealthIndicator.md +78 -0
- package/data/packages/platform-intelligence/api/index.md +1 -0
- package/data/packages/platform-intelligence/index.md +24 -1
- package/data/packages/platform-logging/api/Class.ContextLogger.md +152 -0
- package/data/packages/platform-logging/api/Class.LoggerModule.md +8 -2
- package/data/packages/platform-logging/api/Class.RequestContextStore.md +90 -0
- package/data/packages/platform-logging/api/Class.RequestIdMiddleware.md +68 -0
- package/data/packages/platform-logging/api/Interface.IRequestContext.md +34 -0
- package/data/packages/platform-logging/api/Variable.REQUEST_ID_HEADER.md +14 -0
- package/data/packages/platform-logging/api/index.md +11 -1
- package/data/packages/platform-logging/index.md +89 -7
- package/data/packages/platform-mailing/api/Class.MailHealthIndicator.md +5 -5
- package/data/packages/platform-mailing/api/Class.MailModule.md +28 -1
- package/data/packages/platform-mailing/api/Class.MailVerificationService.md +49 -16
- package/data/packages/platform-mailing/api/Class.SmtpConnectionVerifier.md +84 -0
- package/data/packages/platform-mailing/api/Interface.IMailModuleOptions.md +36 -0
- package/data/packages/platform-mailing/api/index.md +3 -1
- package/data/packages/platform-mailing/index.md +64 -8
- package/data/packages/platform-mapping/api/Class.MappingBuilder.md +110 -0
- package/data/packages/platform-mapping/api/Class.MappingError.md +56 -0
- package/data/packages/platform-mapping/api/Class.MappingModule.md +46 -0
- package/data/packages/platform-mapping/api/Class.MappingNotRegisteredError.md +52 -0
- package/data/packages/platform-mapping/api/Class.MappingProfileBase.md +52 -0
- package/data/packages/platform-mapping/api/Class.MappingService.md +284 -0
- package/data/packages/platform-mapping/api/Class.TypeMappingNotRegisteredError.md +53 -0
- package/data/packages/platform-mapping/api/Function.createMappingKey.md +39 -0
- package/data/packages/platform-mapping/api/Interface.IMappingBuilder.md +76 -0
- package/data/packages/platform-mapping/api/Interface.IMappingKey.md +58 -0
- package/data/packages/platform-mapping/api/Interface.IMappingProfile.md +32 -0
- package/data/packages/platform-mapping/api/TypeAlias.Constructor.md +28 -0
- package/data/packages/platform-mapping/api/index.md +38 -0
- package/data/packages/platform-mapping/index.md +1 -1
- package/data/packages/platform-mcp/api/Class.McpHealthIndicator.md +78 -0
- package/data/packages/platform-mcp/api/index.md +1 -0
- package/data/packages/platform-mcp/index.md +24 -1
- package/data/packages/platform-openapi/api/Function.SwaggerFeature.md +2 -2
- package/data/packages/platform-openapi/api/Function.getSwaggerFeatureMetadata.md +2 -2
- package/data/packages/platform-payments/api/Class.LemonSqueezyClient.md +24 -0
- package/data/packages/platform-payments/api/Class.MollieClient.md +24 -0
- package/data/packages/platform-payments/api/Class.PaddleClient.md +24 -0
- package/data/packages/platform-payments/api/Class.PaymentClientPort.md +20 -0
- package/data/packages/platform-payments/api/Class.PaymentHealthIndicator.md +78 -0
- package/data/packages/platform-payments/api/Class.StripeClient.md +28 -4
- package/data/packages/platform-payments/api/index.md +1 -0
- package/data/packages/platform-payments/index.md +26 -2
- package/data/packages/platform-queue/api/Class.AzureQueue.md +221 -0
- package/data/packages/platform-queue/api/Class.BullMqQueue.md +220 -0
- package/data/packages/platform-queue/api/Class.MemoryQueue.md +194 -0
- package/data/packages/platform-queue/api/Class.QueueError.md +51 -0
- package/data/packages/platform-queue/api/Class.QueueHealthIndicator.md +68 -0
- package/data/packages/platform-queue/api/Class.QueueJobNotFoundError.md +43 -0
- package/data/packages/platform-queue/api/Class.QueueJobStateError.md +48 -0
- package/data/packages/platform-queue/api/Class.QueueValidationError.md +43 -0
- package/data/packages/platform-queue/api/Interface.IAzureQueueOptions.md +48 -0
- package/data/packages/platform-queue/api/Interface.IBullMqQueueOptions.md +45 -0
- package/data/packages/platform-queue/api/Interface.IMemoryQueueOptions.md +32 -0
- package/data/packages/platform-queue/api/Interface.IQueue.md +173 -0
- package/data/packages/platform-queue/api/Interface.IQueueJob.md +139 -0
- package/data/packages/platform-queue/api/TypeAlias.QueueJobStatus.md +14 -0
- package/data/packages/platform-queue/api/Variable.AZURE_CONFIG_ENTRIES.md +17 -0
- package/data/packages/platform-queue/api/Variable.AZURE_CONNECTION_STRING.md +14 -0
- package/data/packages/platform-queue/api/Variable.AZURE_RECEIVE_WAIT_MS.md +21 -0
- package/data/packages/platform-queue/api/Variable.BULLMQ_CONFIG_ENTRIES.md +17 -0
- package/data/packages/platform-queue/api/Variable.BULLMQ_PREFIX.md +18 -0
- package/data/packages/platform-queue/api/Variable.BULLMQ_REDIS_URL.md +21 -0
- package/data/packages/platform-queue/api/Variable.PLATFORM_QUEUE_CONFIG_ENTRIES.md +17 -0
- package/data/packages/platform-queue/api/Variable.QUEUE_JOB_STATUS.md +30 -0
- package/data/packages/platform-queue/api/Variable.QUEUE_MAX_JOBS.md +21 -0
- package/data/packages/platform-queue/api/index.md +49 -0
- package/data/packages/platform-queue/index.md +168 -0
- package/data/packages/platform-resources/api/Class.BlobResourceStrategy.md +195 -0
- package/data/packages/platform-resources/api/Class.EmbeddedResourceStrategy.md +215 -0
- package/data/packages/platform-resources/api/Class.FileResourceStrategy.md +190 -0
- package/data/packages/platform-resources/api/Class.ResourceManager.md +477 -0
- package/data/packages/platform-resources/api/Class.ResourceModule.md +46 -0
- package/data/packages/platform-resources/api/Class.ResourceNotFoundError.md +60 -0
- package/data/packages/platform-resources/api/Interface.IBlobResourceStrategyConfig.md +28 -0
- package/data/packages/platform-resources/api/Interface.IBlobServiceAdapter.md +40 -0
- package/data/packages/platform-resources/api/Interface.IFileResourceStrategyConfig.md +72 -0
- package/data/packages/platform-resources/api/Interface.IResourceManagerConfig.md +89 -0
- package/data/packages/platform-resources/api/Interface.IResourceMetadata.md +94 -0
- package/data/packages/platform-resources/api/Interface.IResourceResult.md +34 -0
- package/data/packages/platform-resources/api/Interface.IResourceStrategy.md +134 -0
- package/data/packages/platform-resources/api/index.md +29 -0
- package/data/packages/platform-resources/index.md +1 -1
- package/data/packages/platform-telemetry/api/Class.OtelSdkHolder.md +21 -3
- package/data/packages/platform-telemetry/api/Class.TelemetryHealthIndicator.md +78 -0
- package/data/packages/platform-telemetry/api/index.md +1 -0
- package/data/packages/platform-telemetry/index.md +25 -1
- package/data/patterns/config-pattern.md +5 -3
- package/package.json +2 -2
- package/src/tools/registerGetConfigPatternTool.js +1 -1
- package/src/tools/registerGetDtoPatternTool.js +1 -1
- package/src/tools/registerGetErrorHandlingPatternTool.js +1 -1
- package/src/tools/registerGetGuardPatternTool.js +1 -1
- package/src/tools/registerGetMappingPatternTool.js +1 -1
- package/src/tools/registerGetModulePatternTool.js +1 -1
- package/src/tools/registerGetQueryPatternTool.js +1 -1
- package/src/tools/registerGetRepositoryPatternTool.js +1 -1
- package/src/tools/registerGetTestingPatternTool.js +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @breadstone/archipel-mcp
|
|
2
2
|
|
|
3
|
-
MCP (Model Context Protocol) server that provides Archipel platform knowledge
|
|
3
|
+
MCP (Model Context Protocol) server that provides Archipel platform knowledge - documentation and query patterns - to AI development tools. The server acts as a structured knowledge provider: AI models combine this knowledge with the user's project context to generate framework-compliant code.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -40,30 +40,49 @@ npx @breadstone/archipel-mcp
|
|
|
40
40
|
Returns the complete Archipel v1 query pattern: `IRepositoryQuery` interface, `query()` factory, `QueryResultType`, transactional queries, rules, and usage examples. When a `modelName` and `fields` array are provided, it generates tailored `findFirst`, `findMany`, and `count` query examples for that model.
|
|
41
41
|
|
|
42
42
|
```
|
|
43
|
-
modelName?: string
|
|
44
|
-
fields?: string[]
|
|
43
|
+
modelName?: string - Prisma model name (e.g. "User")
|
|
44
|
+
fields?: string[] - Field names (e.g. ["id", "email", "name", "createdAt"])
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
## Architecture
|
|
48
48
|
|
|
49
49
|
Plain Node.js MCP server using `@modelcontextprotocol/sdk`. No NestJS, no DI container.
|
|
50
50
|
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
```mermaid
|
|
52
|
+
flowchart TB
|
|
53
|
+
MainTs[main.ts\nCLI entry\nstdio transport + tool registration]
|
|
54
|
+
DocsLoader[DocsLoader.ts\nLoads and indexes .docs/packages]
|
|
55
|
+
GuidesLoader[GuidesLoader.ts\nLoads and indexes .docs/guides]
|
|
56
|
+
PatternsLoader[PatternsLoader.ts\nLoads and indexes .docs/patterns]
|
|
57
|
+
|
|
58
|
+
subgraph Models[models/]
|
|
59
|
+
IPackageDoc[IPackageDoc.ts\nPackage documentation interface]
|
|
60
|
+
IGuideDoc[IGuideDoc.ts\nGuide documentation interface]
|
|
61
|
+
IPatternDoc[IPatternDoc.ts\nPattern documentation interface]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
subgraph Generators[generators/]
|
|
65
|
+
QueryGenerator[queryPatternGenerator.ts]
|
|
66
|
+
RepositoryGenerator[repositoryPatternGenerator.ts]
|
|
67
|
+
MappingGenerator[mappingPatternGenerator.ts]
|
|
68
|
+
ModuleGenerator[modulePatternGenerator.ts]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
MainTs --> DocsLoader
|
|
72
|
+
MainTs --> GuidesLoader
|
|
73
|
+
MainTs --> PatternsLoader
|
|
74
|
+
DocsLoader --> IPackageDoc
|
|
75
|
+
GuidesLoader --> IGuideDoc
|
|
76
|
+
PatternsLoader --> IPatternDoc
|
|
58
77
|
```
|
|
59
78
|
|
|
60
79
|
### Documentation Resolution
|
|
61
80
|
|
|
62
81
|
The server locates docs in this order:
|
|
63
82
|
|
|
64
|
-
1. **Bundled data**
|
|
65
|
-
2. **Workspace root**
|
|
66
|
-
3. **Relative fallback**
|
|
83
|
+
1. **Bundled data** - `<package>/data/packages/` (shipped with the npm package)
|
|
84
|
+
2. **Workspace root** - `<cwd>/.docs/packages/` (monorepo development)
|
|
85
|
+
3. **Relative fallback** - walks up from compiled source to find `.docs/packages/`
|
|
67
86
|
|
|
68
87
|
## Development
|
|
69
88
|
|
|
@@ -368,28 +368,20 @@ If an AI SDK provider package is not installed, the error message clearly states
|
|
|
368
368
|
|
|
369
369
|
## Architecture Overview
|
|
370
370
|
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
┌─────────────┐ ┌──────────────┐
|
|
388
|
-
│ Provider │ │ Feature │
|
|
389
|
-
│ Loaders │ │ Capabilities │
|
|
390
|
-
│ (OpenAI, │ │ (custom │
|
|
391
|
-
│ Anthropic, │ │ handlers) │
|
|
392
|
-
│ Google, │ │ │
|
|
393
|
-
│ Grok) │ │ │
|
|
394
|
-
└─────────────┘ └──────────────┘
|
|
371
|
+
```mermaid
|
|
372
|
+
flowchart TB
|
|
373
|
+
subgraph IntelligenceModule[IntelligenceModule]
|
|
374
|
+
TextGenerator[IntelligenceTextGenerator\nConfigService -> provider]
|
|
375
|
+
CapabilityRegistry[IntelligenceCapability Registry]
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
GenerateText["generateText(prompt, options?)"]
|
|
379
|
+
ResolveCapability["resolve(intent, context)\nregister(capability)"]
|
|
380
|
+
ProviderLoaders[Provider Loaders\nOpenAI, Anthropic, Google, Grok]
|
|
381
|
+
FeatureCapabilities[Feature Capabilities\ncustom handlers]
|
|
382
|
+
|
|
383
|
+
TextGenerator --> GenerateText
|
|
384
|
+
CapabilityRegistry --> ResolveCapability
|
|
385
|
+
TextGenerator --> ProviderLoaders
|
|
386
|
+
CapabilityRegistry --> FeatureCapabilities
|
|
395
387
|
```
|
package/data/guides/caching.md
CHANGED
|
@@ -24,6 +24,39 @@ yarn add ioredis
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
## Configuration
|
|
28
|
+
|
|
29
|
+
### Core Variables
|
|
30
|
+
|
|
31
|
+
```env
|
|
32
|
+
CACHE_DEFAULT_TTL_MS=60000
|
|
33
|
+
CACHE_MAX_ENTRIES=1000
|
|
34
|
+
CACHE_STALE_WHILE_REVALIDATE=false
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
All core variables are optional. When omitted, each cache instance uses the values passed directly to its constructor options.
|
|
38
|
+
|
|
39
|
+
### Redis Variables
|
|
40
|
+
|
|
41
|
+
```env
|
|
42
|
+
REDIS_URL=redis://localhost:6379
|
|
43
|
+
REDIS_KEY_PREFIX=app:
|
|
44
|
+
REDIS_TTL_SECONDS=300
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`REDIS_URL` is required when using `RedisLayeredCache`. The other variables are optional.
|
|
48
|
+
|
|
49
|
+
### Using Config Keys
|
|
50
|
+
|
|
51
|
+
Import the typed config keys and pass them to your module registration:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { PLATFORM_CACHING_CONFIG_ENTRIES } from '@breadstone/archipel-platform-caching';
|
|
55
|
+
import { REDIS_CONFIG_ENTRIES } from '@breadstone/archipel-platform-caching/redis';
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
27
60
|
## Concepts
|
|
28
61
|
|
|
29
62
|
`platform-caching` provides a generic `ILayeredCache<TKey, TValue>` interface with two implementations:
|
|
@@ -147,7 +147,33 @@ The `template` field is the template name (without extension). The `context` obj
|
|
|
147
147
|
|
|
148
148
|
---
|
|
149
149
|
|
|
150
|
-
##
|
|
150
|
+
## SMTP Connection Verification
|
|
151
|
+
|
|
152
|
+
`SmtpConnectionVerifier` verifies SMTP server connectivity and optionally sends a test email. It replaces the deprecated `MailVerificationService`.
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
import { Injectable } from '@nestjs/common';
|
|
156
|
+
import { SmtpConnectionVerifier } from '@breadstone/archipel-platform-mailing';
|
|
157
|
+
|
|
158
|
+
@Injectable()
|
|
159
|
+
export class HealthService {
|
|
160
|
+
constructor(private readonly _smtpVerifier: SmtpConnectionVerifier) {}
|
|
161
|
+
|
|
162
|
+
public async checkSmtpConnectivity(): Promise<boolean> {
|
|
163
|
+
return this._smtpVerifier.verifyConnection();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
public async sendTestEmail(to: string): Promise<boolean> {
|
|
167
|
+
return this._smtpVerifier.sendTestEmail(to);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Email Verification (Deprecated)
|
|
173
|
+
|
|
174
|
+
::: warning Deprecated
|
|
175
|
+
`MailVerificationService` is deprecated. Use `SmtpConnectionVerifier` for SMTP connectivity checks.
|
|
176
|
+
:::
|
|
151
177
|
|
|
152
178
|
`MailVerificationService` provides a complete email verification flow:
|
|
153
179
|
|
|
@@ -16,16 +16,14 @@ This guide explains how to create email templates for `platform-mailing` and reg
|
|
|
16
16
|
|
|
17
17
|
`platform-mailing` does **not** ship ready-made template files. It defines a list of known template **names** and loads the actual content through `ResourceManager` at startup.
|
|
18
18
|
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(variable interpolation) BlobResourceStrategy
|
|
28
|
-
EmbeddedResourceStrategy
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart LR
|
|
21
|
+
MailService["MailService<br/>sendTemplate()"] --> MailTemplateEngine["MailTemplateEngine<br/>compileTemplate()"]
|
|
22
|
+
MailTemplateEngine --> ResourceManager["ResourceManager<br/>tryLoadAsync()"]
|
|
23
|
+
MailTemplateEngine --> ContentTemplateEngine["ContentTemplateEngine<br/>variable interpolation"]
|
|
24
|
+
ResourceManager --> FileResourceStrategy[FileResourceStrategy]
|
|
25
|
+
ResourceManager --> BlobResourceStrategy[BlobResourceStrategy]
|
|
26
|
+
ResourceManager --> EmbeddedResourceStrategy[EmbeddedResourceStrategy]
|
|
29
27
|
```
|
|
30
28
|
|
|
31
29
|
1. `MailService.sendTemplate()` passes the template name and context variables to `MailTemplateEngine`.
|
|
@@ -59,18 +57,18 @@ Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
|
59
57
|
|
|
60
58
|
| Syntax | Description |
|
|
61
59
|
| ---------------------------------------------- | --------------------------------- |
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
60
|
+
| `<code>{{variableName}}</code>` | Simple variable substitution |
|
|
61
|
+
| `<code>{{#if condition}}...{{/if}}</code>` | Conditional block |
|
|
62
|
+
| `<code>{{#if condition}}...{{else}}...{{/if}}</code>` | Conditional with else |
|
|
63
|
+
| `<code>{{#unless condition}}...{{/unless}}</code>` | Negative conditional |
|
|
64
|
+
| `<code>{{#each items}}...{{/each}}</code>` | Loop over array |
|
|
65
|
+
| `<code>{{#with object}}...{{/with}}</code>` | Context switching |
|
|
66
|
+
| `<code>{{@index}}</code>`, `<code>{{@first}}</code>`, `<code>{{@last}}</code>` | Loop metadata inside `#each` |
|
|
67
|
+
| `<code>{{nested.property}}</code>` | Dot notation for nested values |
|
|
70
68
|
|
|
71
69
|
### Example: `AuthVerify.html`
|
|
72
70
|
|
|
73
|
-
```
|
|
71
|
+
```text
|
|
74
72
|
<!DOCTYPE html>
|
|
75
73
|
<html>
|
|
76
74
|
<head>
|
|
@@ -78,14 +76,14 @@ Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
|
78
76
|
<title>Verify your email</title>
|
|
79
77
|
</head>
|
|
80
78
|
<body>
|
|
81
|
-
<h1>Hello,
|
|
79
|
+
<h1>Hello, {{userName}}!</h1>
|
|
82
80
|
<p>Please verify your email address by clicking the link below:</p>
|
|
83
81
|
<p>
|
|
84
|
-
<a href="
|
|
82
|
+
<a href="{{verificationUrl}}">Verify Email</a>
|
|
85
83
|
</p>
|
|
86
|
-
|
|
87
|
-
<p>This link expires in
|
|
88
|
-
|
|
84
|
+
{{#if expiresInHours}}
|
|
85
|
+
<p>This link expires in {{expiresInHours}} hours.</p>
|
|
86
|
+
{{/if}}
|
|
89
87
|
<p>If you did not create an account, you can safely ignore this email.</p>
|
|
90
88
|
</body>
|
|
91
89
|
</html>
|
|
@@ -94,13 +92,13 @@ Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
|
94
92
|
### Example: `AuthVerify.txt`
|
|
95
93
|
|
|
96
94
|
```text
|
|
97
|
-
Hello,
|
|
95
|
+
Hello, {{userName}}!
|
|
98
96
|
|
|
99
97
|
Please verify your email address by visiting the following link:
|
|
100
98
|
|
|
101
|
-
|
|
99
|
+
{{verificationUrl}}
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
{{#if expiresInHours}}This link expires in {{expiresInHours}} hours.{{/if}}
|
|
104
102
|
|
|
105
103
|
If you did not create an account, you can safely ignore this email.
|
|
106
104
|
```
|
|
@@ -117,18 +115,30 @@ When the format is `html`, `MailTemplateEngine` automatically **escapes all cont
|
|
|
117
115
|
|
|
118
116
|
Place your template files in your application's assets directory and register the path with `ResourceModule`:
|
|
119
117
|
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
```mermaid
|
|
119
|
+
flowchart TB
|
|
120
|
+
Root[my-app/]
|
|
121
|
+
Src[src/]
|
|
122
|
+
Assets[assets/]
|
|
123
|
+
AppModule[app.module.ts]
|
|
124
|
+
AuthRegisterHtml[AuthRegister.html]
|
|
125
|
+
AuthRegisterTxt[AuthRegister.txt]
|
|
126
|
+
AuthVerifyHtml[AuthVerify.html]
|
|
127
|
+
AuthVerifyTxt[AuthVerify.txt]
|
|
128
|
+
AuthForgotPasswordHtml[AuthForgotPassword.html]
|
|
129
|
+
AppointmentInvitationHtml[AppointmentInvitation.html]
|
|
130
|
+
AppointmentUpdateHtml[AppointmentUpdate.html]
|
|
131
|
+
|
|
132
|
+
Root --> Src
|
|
133
|
+
Src --> Assets
|
|
134
|
+
Src --> AppModule
|
|
135
|
+
Assets --> AuthRegisterHtml
|
|
136
|
+
Assets --> AuthRegisterTxt
|
|
137
|
+
Assets --> AuthVerifyHtml
|
|
138
|
+
Assets --> AuthVerifyTxt
|
|
139
|
+
Assets --> AuthForgotPasswordHtml
|
|
140
|
+
Assets --> AppointmentInvitationHtml
|
|
141
|
+
Assets --> AppointmentUpdateHtml
|
|
132
142
|
```
|
|
133
143
|
|
|
134
144
|
```typescript
|
|
@@ -56,11 +56,17 @@ export class AppModule {}
|
|
|
56
56
|
|
|
57
57
|
## Configuration
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
Each provider requires its own set of environment variables. See the [platform-esigning package docs](../packages/platform-esigning/) for the full table per provider.
|
|
60
|
+
|
|
61
|
+
### Provider Environment Variables (Summary)
|
|
62
|
+
|
|
63
|
+
| Provider | Key Variables |
|
|
64
|
+
| -------------- | -------------------------------------------------------------------------------------------------- |
|
|
65
|
+
| **DocuSign** | `DOCUSIGN_INTEGRATION_KEY`, `DOCUSIGN_SECRET_KEY`, `DOCUSIGN_ACCOUNT_ID`, `DOCUSIGN_BASE_URL` |
|
|
66
|
+
| **Adobe Sign** | `ADOBE_SIGN_INTEGRATION_KEY`, `ADOBE_SIGN_CLIENT_SECRET`, `ADOBE_SIGN_BASE_URL`, `ADOBE_SIGN_WEBHOOK_CLIENT_ID` (required) |
|
|
67
|
+
| **Dropbox Sign** | `DROPBOX_SIGN_API_KEY`, `DROPBOX_SIGN_CLIENT_ID` |
|
|
68
|
+
|
|
69
|
+
> **Breaking change:** `ADOBE_SIGN_WEBHOOK_CLIENT_ID` is now **required** for Adobe Sign webhook verification.
|
|
64
70
|
|
|
65
71
|
---
|
|
66
72
|
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Health Indicators
|
|
3
|
+
description: Integrate health checks from all Archipel platform libraries using the unified health indicator architecture.
|
|
4
|
+
order: 10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Health Indicators
|
|
8
|
+
|
|
9
|
+
Every Archipel platform library ships an optional **health indicator** as a separate `/health` subpath export. Health indicators implement the `IHealthIndicator` interface from `platform-health` and can be registered with the `HealthModule` to build a unified `/health` endpoint for your application.
|
|
10
|
+
|
|
11
|
+
## Architecture
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart LR
|
|
15
|
+
subgraph App
|
|
16
|
+
HealthController --> HealthOrchestrator
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
subgraph platform-health
|
|
20
|
+
HealthOrchestrator
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
subgraph Indicators
|
|
24
|
+
DatabaseHealthIndicator
|
|
25
|
+
BlobHealthIndicator
|
|
26
|
+
MailHealthIndicator
|
|
27
|
+
CachingHealthIndicator
|
|
28
|
+
QueueHealthIndicator
|
|
29
|
+
PaymentHealthIndicator
|
|
30
|
+
EsigningHealthIndicator
|
|
31
|
+
IntelligenceHealthIndicator
|
|
32
|
+
AnalyticsHealthIndicator
|
|
33
|
+
TelemetryHealthIndicator
|
|
34
|
+
AuthenticationHealthIndicator
|
|
35
|
+
McpHealthIndicator
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
HealthOrchestrator --> Indicators
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The `HealthOrchestrator` aggregates all registered `IHealthIndicator` instances and returns a combined result. Each indicator reports its own key and status independently.
|
|
42
|
+
|
|
43
|
+
## Prerequisites
|
|
44
|
+
|
|
45
|
+
- `@breadstone/archipel-platform-health` installed
|
|
46
|
+
- `@nestjs/terminus` installed (peer dependency)
|
|
47
|
+
|
|
48
|
+
## IHealthIndicator Interface
|
|
49
|
+
|
|
50
|
+
Every health indicator implements this contract:
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
interface IHealthIndicator {
|
|
54
|
+
/** Unique key identifying this indicator in the health response. */
|
|
55
|
+
readonly key: string;
|
|
56
|
+
|
|
57
|
+
/** Run the health check and return a Terminus HealthIndicatorResult. */
|
|
58
|
+
check(): HealthIndicatorResult | Promise<HealthIndicatorResult>;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Available Indicators
|
|
63
|
+
|
|
64
|
+
All 12 platform libraries provide a health indicator via their `/health` subpath:
|
|
65
|
+
|
|
66
|
+
| Library | Subpath Import | Class | Key | Check Behavior |
|
|
67
|
+
| ------- | -------------- | ----- | --- | -------------- |
|
|
68
|
+
| `platform-database` | `@breadstone/archipel-platform-database/health` | `DatabaseHealthIndicator` | `database` | Prisma `SELECT 1` ping |
|
|
69
|
+
| `platform-blob-storage` | `@breadstone/archipel-platform-blob-storage/health` | `BlobHealthIndicator` | `blob` | HTTP ping to blob URL (or `disabled` if unconfigured) |
|
|
70
|
+
| `platform-mailing` | `@breadstone/archipel-platform-mailing/health` | `MailHealthIndicator` | `mail` | Validates mail host, user, and port config |
|
|
71
|
+
| `platform-caching` | `@breadstone/archipel-platform-caching/health` | `CachingHealthIndicator` | `caching` | Always `up` |
|
|
72
|
+
| `platform-queue` | `@breadstone/archipel-platform-queue/health` | `QueueHealthIndicator` | `queue` | Always `up` |
|
|
73
|
+
| `platform-payments` | `@breadstone/archipel-platform-payments/health` | `PaymentHealthIndicator` | `payment` | Calls `PaymentClientPort.ping()` to verify provider connectivity |
|
|
74
|
+
| `platform-esigning` | `@breadstone/archipel-platform-esigning/health` | `EsigningHealthIndicator` | `esigning` | Calls `EsigningClientPort.ping()` to verify provider connectivity, reports `providerId` |
|
|
75
|
+
| `platform-intelligence` | `@breadstone/archipel-platform-intelligence/health` | `IntelligenceHealthIndicator` | `intelligence` | Checks `list().length > 0` on the capability registry, reports count |
|
|
76
|
+
| `platform-analytics` | `@breadstone/archipel-platform-analytics/health` | `AnalyticsHealthIndicator` | `analytics` | Calls `AnalyticsClientPort.ping()` to verify provider readiness |
|
|
77
|
+
| `platform-telemetry` | `@breadstone/archipel-platform-telemetry/health` | `TelemetryHealthIndicator` | `telemetry` | Checks `OtelSdkHolder.isInitialized` for SDK presence |
|
|
78
|
+
| `platform-authentication` | `@breadstone/archipel-platform-authentication/health` | `AuthenticationHealthIndicator` | `authentication` | Always `up` |
|
|
79
|
+
| `platform-mcp` | `@breadstone/archipel-platform-mcp/health` | `McpHealthIndicator` | `mcp` | Checks tool/resource/prompt registry counts, reports breakdown |
|
|
80
|
+
|
|
81
|
+
### Indicator Categories
|
|
82
|
+
|
|
83
|
+
**Active checks** — perform a real probe:
|
|
84
|
+
- `DatabaseHealthIndicator` — executes a SQL ping
|
|
85
|
+
- `BlobHealthIndicator` — sends an HTTP request to the blob URL
|
|
86
|
+
- `MailHealthIndicator` — validates configuration values
|
|
87
|
+
- `PaymentHealthIndicator` — calls `PaymentClientPort.ping()` (adapters can override for real API calls)
|
|
88
|
+
- `EsigningHealthIndicator` — calls `EsigningClientPort.ping()` (adapters can override for real API calls)
|
|
89
|
+
- `AnalyticsHealthIndicator` — calls `AnalyticsClientPort.ping()` (adapters can override for SDK readiness checks)
|
|
90
|
+
|
|
91
|
+
**State checks** — inspect in-memory state (zero-cost, no I/O):
|
|
92
|
+
- `IntelligenceHealthIndicator` — verifies at least one capability is registered
|
|
93
|
+
- `TelemetryHealthIndicator` — checks whether the OpenTelemetry SDK has been initialized
|
|
94
|
+
- `McpHealthIndicator` — verifies at least one tool/resource/prompt handler is registered
|
|
95
|
+
|
|
96
|
+
**Stub checks** — always report `up`:
|
|
97
|
+
- `CachingHealthIndicator`, `QueueHealthIndicator`, `AuthenticationHealthIndicator`
|
|
98
|
+
|
|
99
|
+
## Quick Start
|
|
100
|
+
|
|
101
|
+
### 1. Register Indicators
|
|
102
|
+
|
|
103
|
+
Use `HealthModule.withIndicators()` to register the indicators you need:
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import { Module } from '@nestjs/common';
|
|
107
|
+
import { HealthModule } from '@breadstone/archipel-platform-health';
|
|
108
|
+
import { DatabaseHealthIndicator } from '@breadstone/archipel-platform-database/health';
|
|
109
|
+
import { MailHealthIndicator } from '@breadstone/archipel-platform-mailing/health';
|
|
110
|
+
import { PaymentHealthIndicator } from '@breadstone/archipel-platform-payments/health';
|
|
111
|
+
import { CachingHealthIndicator } from '@breadstone/archipel-platform-caching/health';
|
|
112
|
+
|
|
113
|
+
@Module({
|
|
114
|
+
imports: [
|
|
115
|
+
// ... your feature modules
|
|
116
|
+
HealthModule.withIndicators([
|
|
117
|
+
DatabaseHealthIndicator,
|
|
118
|
+
MailHealthIndicator,
|
|
119
|
+
PaymentHealthIndicator,
|
|
120
|
+
CachingHealthIndicator,
|
|
121
|
+
]),
|
|
122
|
+
],
|
|
123
|
+
})
|
|
124
|
+
export class AppModule {}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 2. Expose a Health Endpoint
|
|
128
|
+
|
|
129
|
+
The `HealthOrchestrator` runs all registered indicators and returns an aggregated result:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { Controller, Get } from '@nestjs/common';
|
|
133
|
+
import { HealthOrchestrator } from '@breadstone/archipel-platform-health';
|
|
134
|
+
|
|
135
|
+
@Controller('health')
|
|
136
|
+
export class HealthController {
|
|
137
|
+
constructor(private readonly _health: HealthOrchestrator) {}
|
|
138
|
+
|
|
139
|
+
@Get()
|
|
140
|
+
public async check() {
|
|
141
|
+
return this._health.check();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 3. Example Response
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"status": "ok",
|
|
151
|
+
"details": {
|
|
152
|
+
"database": { "status": "up" },
|
|
153
|
+
"mail": { "status": "up" },
|
|
154
|
+
"payment": { "status": "up" },
|
|
155
|
+
"caching": { "status": "up" },
|
|
156
|
+
"intelligence": { "status": "up", "registeredCapabilities": 3 },
|
|
157
|
+
"mcp": { "status": "up", "tools": 5, "resources": 2, "prompts": 1 },
|
|
158
|
+
"telemetry": { "status": "up", "sdkInitialized": true }
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
When a provider is not registered (e.g., no `PaymentClientPort` injected), the indicator reports:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"payment": { "status": "up", "disabled": true }
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
When a ping fails, the indicator reports `down` with error details:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"payment": { "status": "down", "error": "ECONNREFUSED" }
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Writing a Custom Indicator
|
|
180
|
+
|
|
181
|
+
Implement `IHealthIndicator` to create a health check for your own services:
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
import { Injectable } from '@nestjs/common';
|
|
185
|
+
import { IHealthIndicator } from '@breadstone/archipel-platform-health';
|
|
186
|
+
import type { HealthIndicatorResult } from '@nestjs/terminus';
|
|
187
|
+
|
|
188
|
+
@Injectable()
|
|
189
|
+
export class SearchHealthIndicator implements IHealthIndicator {
|
|
190
|
+
public readonly key = 'search';
|
|
191
|
+
|
|
192
|
+
public check(): HealthIndicatorResult<'search'> {
|
|
193
|
+
return { search: { status: 'up' } };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Register it alongside built-in indicators:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
HealthModule.withIndicators([
|
|
202
|
+
DatabaseHealthIndicator,
|
|
203
|
+
SearchHealthIndicator,
|
|
204
|
+
]);
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Tree-Shaking
|
|
208
|
+
|
|
209
|
+
Health indicators are **not** included in the main library entry point. They are exported from a separate `/health` subpath, so they are fully tree-shakeable. If you don't import the health subpath, the indicator code and its `@nestjs/terminus` peer dependency are never bundled.
|
|
210
|
+
|
|
211
|
+
## Peer Dependencies
|
|
212
|
+
|
|
213
|
+
Each health indicator requires these optional peer dependencies:
|
|
214
|
+
|
|
215
|
+
| Package | Notes |
|
|
216
|
+
| ------- | ----- |
|
|
217
|
+
| `@breadstone/archipel-platform-health` | `IHealthIndicator` interface and `HealthModule` |
|
|
218
|
+
| `@nestjs/terminus` | `HealthIndicatorResult` type |
|
|
219
|
+
|
|
220
|
+
Both are listed as optional peer dependencies in each library's `package.json`.
|
package/data/guides/index.md
CHANGED
|
@@ -52,6 +52,8 @@ Practical guides for working with Archipel packages in your NestJS application.
|
|
|
52
52
|
| [Telemetry & Observability](./telemetry-and-observability) | OpenTelemetry metrics, distributed tracing, and structured logging. |
|
|
53
53
|
| [Analytics & Error Tracking](./analytics-and-error-tracking) | Capture errors and user context with Sentry, AppInsights, or Datadog. |
|
|
54
54
|
| [Caching](./caching) | In-memory LRU and Redis layered caches with TTL, stale-while-revalidate, and metrics. |
|
|
55
|
+
| [Queue Infrastructure](./queue-infrastructure) | In-memory FIFO, BullMQ (Redis), and Azure Service Bus job queues. |
|
|
56
|
+
| [Health Indicators](./health-indicators) | Integrate health checks from all platform libraries using the unified health architecture. |
|
|
55
57
|
|
|
56
58
|
## AI & Extensibility
|
|
57
59
|
|