@breadstone/archipel-mcp 0.0.1
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 +80 -0
- package/data/packages/index.md +42 -0
- package/data/packages/platform-authentication/api/Class.AnonymousAuthGuard.md +45 -0
- package/data/packages/platform-authentication/api/Class.AuthModule.md +72 -0
- package/data/packages/platform-authentication/api/Class.AuthSubjectPort.md +100 -0
- package/data/packages/platform-authentication/api/Class.AuthTokenService.md +64 -0
- package/data/packages/platform-authentication/api/Class.ChallengeService.md +136 -0
- package/data/packages/platform-authentication/api/Class.GithubAuthGuard.md +45 -0
- package/data/packages/platform-authentication/api/Class.JwtAuthGuard.md +45 -0
- package/data/packages/platform-authentication/api/Class.JwtPayloadBase.md +116 -0
- package/data/packages/platform-authentication/api/Class.LastActiveMiddleware.md +76 -0
- package/data/packages/platform-authentication/api/Class.LocalAuthGuard.md +45 -0
- package/data/packages/platform-authentication/api/Class.MfaService.md +257 -0
- package/data/packages/platform-authentication/api/Class.MfaSubjectPort.md +75 -0
- package/data/packages/platform-authentication/api/Class.RolesGuard.md +65 -0
- package/data/packages/platform-authentication/api/Class.SessionMappingProfile.md +65 -0
- package/data/packages/platform-authentication/api/Class.SessionPersistencePort.md +170 -0
- package/data/packages/platform-authentication/api/Class.SessionResponse.md +157 -0
- package/data/packages/platform-authentication/api/Class.SessionService.md +167 -0
- package/data/packages/platform-authentication/api/Class.SocialAuthGuard.md +66 -0
- package/data/packages/platform-authentication/api/Class.SocialAuthPort.md +53 -0
- package/data/packages/platform-authentication/api/Class.TokenEnricherPort.md +52 -0
- package/data/packages/platform-authentication/api/Class.VerificationService.md +159 -0
- package/data/packages/platform-authentication/api/Class.VerificationSubjectPort.md +121 -0
- package/data/packages/platform-authentication/api/Interface.IAuthModuleOptions.md +89 -0
- package/data/packages/platform-authentication/api/Interface.IAuthSubject.md +112 -0
- package/data/packages/platform-authentication/api/Interface.IMfaChallengePayload.md +87 -0
- package/data/packages/platform-authentication/api/Interface.IMfaChallengeState.md +123 -0
- package/data/packages/platform-authentication/api/Interface.IMfaConfirmation.md +27 -0
- package/data/packages/platform-authentication/api/Interface.IMfaSetup.md +63 -0
- package/data/packages/platform-authentication/api/Interface.IMfaSubject.md +136 -0
- package/data/packages/platform-authentication/api/Interface.IMfaSubjectUpdate.md +96 -0
- package/data/packages/platform-authentication/api/Interface.ISessionRecord.md +165 -0
- package/data/packages/platform-authentication/api/Interface.ISignInResult.md +87 -0
- package/data/packages/platform-authentication/api/Interface.ISocialProfile.md +63 -0
- package/data/packages/platform-authentication/api/Interface.IStoreSessionArgs.md +75 -0
- package/data/packages/platform-authentication/api/Interface.IVerifiableSubject.md +76 -0
- package/data/packages/platform-authentication/api/_media/ENVIRONMENT_VARIABLES.md +151 -0
- package/data/packages/platform-authentication/api/index.md +508 -0
- package/data/packages/platform-authentication/index.md +635 -0
- package/data/packages/platform-blob-storage/api/Class.BlobHealthIndicator.md +84 -0
- package/data/packages/platform-blob-storage/api/Class.BlobModule.md +54 -0
- package/data/packages/platform-blob-storage/api/Class.BlobObjectPersistencePort.md +80 -0
- package/data/packages/platform-blob-storage/api/Class.BlobService.md +253 -0
- package/data/packages/platform-blob-storage/api/Class.BlobVariantPersistencePort.md +56 -0
- package/data/packages/platform-blob-storage/api/Class.VercelBlobProvider.md +202 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobDeleteRequest.md +43 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadRequest.md +53 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadResult.md +69 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +53 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobObjectMetadata.md +143 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobProvider.md +119 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobSignedUrlRequest.md +53 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadRequest.md +103 -0
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadResult.md +33 -0
- package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +33 -0
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderOptions.md +73 -0
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +33 -0
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobDownloadResponseType.md +17 -0
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobUploadBody.md +17 -0
- package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +17 -0
- package/data/packages/platform-blob-storage/api/index.md +111 -0
- package/data/packages/platform-blob-storage/index.md +280 -0
- package/data/packages/platform-core/api/Class.AppHealthIndicator.md +51 -0
- package/data/packages/platform-core/api/Class.BcryptService.md +69 -0
- package/data/packages/platform-core/api/Class.BlobResourceStrategy.md +196 -0
- package/data/packages/platform-core/api/Class.BooleanUtils.md +83 -0
- package/data/packages/platform-core/api/Class.CUIDGenerator.md +121 -0
- package/data/packages/platform-core/api/Class.CasingInterceptor.md +84 -0
- package/data/packages/platform-core/api/Class.CatchUtils.md +94 -0
- package/data/packages/platform-core/api/Class.ConfigModule.md +70 -0
- package/data/packages/platform-core/api/Class.ConfigRegistry.md +116 -0
- package/data/packages/platform-core/api/Class.ConfigService.md +139 -0
- package/data/packages/platform-core/api/Class.ConfigStrategyBase.md +110 -0
- package/data/packages/platform-core/api/Class.ContentTemplateEngine.md +64 -0
- package/data/packages/platform-core/api/Class.CryptoService.md +50 -0
- package/data/packages/platform-core/api/Class.DateTimeUtils.md +102 -0
- package/data/packages/platform-core/api/Class.DeviceParserService.md +53 -0
- package/data/packages/platform-core/api/Class.EmbeddedResourceStrategy.md +216 -0
- package/data/packages/platform-core/api/Class.EnvironmentConfigStrategy.md +144 -0
- package/data/packages/platform-core/api/Class.ErrorTemplateService.md +110 -0
- package/data/packages/platform-core/api/Class.EventHub.md +164 -0
- package/data/packages/platform-core/api/Class.EventModule.md +23 -0
- package/data/packages/platform-core/api/Class.FileConfigStrategy.md +150 -0
- package/data/packages/platform-core/api/Class.FileResourceStrategy.md +193 -0
- package/data/packages/platform-core/api/Class.GUIDGenerator.md +86 -0
- package/data/packages/platform-core/api/Class.GlobalExceptionFilter.md +67 -0
- package/data/packages/platform-core/api/Class.HealthModule.md +43 -0
- package/data/packages/platform-core/api/Class.HealthOrchestrator.md +65 -0
- package/data/packages/platform-core/api/Class.HostModule.md +33 -0
- package/data/packages/platform-core/api/Class.HostService.md +150 -0
- package/data/packages/platform-core/api/Class.HttpLoggerMiddleware.md +60 -0
- package/data/packages/platform-core/api/Class.IdGeneratorBase.md +88 -0
- package/data/packages/platform-core/api/Class.IdentifierModule.md +41 -0
- package/data/packages/platform-core/api/Class.IntelligenceCapabilityRegistrarBase.md +39 -0
- package/data/packages/platform-core/api/Class.IntelligenceCapabilityRegistry.md +103 -0
- package/data/packages/platform-core/api/Class.IntelligenceModule.md +23 -0
- package/data/packages/platform-core/api/Class.IntelligenceTextGenerator.md +82 -0
- package/data/packages/platform-core/api/Class.LimitRequestSizeMiddleware.md +60 -0
- package/data/packages/platform-core/api/Class.LocalizedTextRequest.md +43 -0
- package/data/packages/platform-core/api/Class.LocalizedTextResponse.md +43 -0
- package/data/packages/platform-core/api/Class.MappingBuilder.md +111 -0
- package/data/packages/platform-core/api/Class.MappingModule.md +47 -0
- package/data/packages/platform-core/api/Class.MappingNotRegisteredError.md +57 -0
- package/data/packages/platform-core/api/Class.MappingProfileBase.md +53 -0
- package/data/packages/platform-core/api/Class.MappingService.md +285 -0
- package/data/packages/platform-core/api/Class.MemoryLayeredCache.md +251 -0
- package/data/packages/platform-core/api/Class.NoopCacheMetricsRecorder.md +157 -0
- package/data/packages/platform-core/api/Class.NormalizedUtils.md +149 -0
- package/data/packages/platform-core/api/Class.OtpService.md +106 -0
- package/data/packages/platform-core/api/Class.PageableRequest.md +43 -0
- package/data/packages/platform-core/api/Class.PageableResponse.md +63 -0
- package/data/packages/platform-core/api/Class.ProblemDetailException.md +62 -0
- package/data/packages/platform-core/api/Class.ProblemDetailExceptionFilter.md +85 -0
- package/data/packages/platform-core/api/Class.QuantityResponse.md +43 -0
- package/data/packages/platform-core/api/Class.RedisLayeredCache.md +275 -0
- package/data/packages/platform-core/api/Class.ResourceManager.md +566 -0
- package/data/packages/platform-core/api/Class.ResourceModule.md +47 -0
- package/data/packages/platform-core/api/Class.ResponseReturn.md +504 -0
- package/data/packages/platform-core/api/Class.SseHub.md +184 -0
- package/data/packages/platform-core/api/Class.SseModule.md +43 -0
- package/data/packages/platform-core/api/Class.TimeStampResponse.md +43 -0
- package/data/packages/platform-core/api/Class.TypeMappingNotRegisteredError.md +58 -0
- package/data/packages/platform-core/api/Class.UUIDGenerator.md +86 -0
- package/data/packages/platform-core/api/Class.UserAvatarGeneratorService.md +48 -0
- package/data/packages/platform-core/api/Class.UserNameGeneratorService.md +65 -0
- package/data/packages/platform-core/api/Interface.IBlobResourceStrategyConfig.md +29 -0
- package/data/packages/platform-core/api/Interface.IBlobServiceAdapter.md +41 -0
- package/data/packages/platform-core/api/Interface.ICacheMetricsRecorder.md +121 -0
- package/data/packages/platform-core/api/Interface.ICacheStats.md +71 -0
- package/data/packages/platform-core/api/Interface.IConfigKey.md +64 -0
- package/data/packages/platform-core/api/Interface.IConfigModuleOptions.md +41 -0
- package/data/packages/platform-core/api/Interface.IConfigRegistryEntry.md +80 -0
- package/data/packages/platform-core/api/Interface.IDeviceInfo.md +81 -0
- package/data/packages/platform-core/api/Interface.IErrorPageParams.md +154 -0
- package/data/packages/platform-core/api/Interface.IEventKey.md +58 -0
- package/data/packages/platform-core/api/Interface.IEventMap.md +17 -0
- package/data/packages/platform-core/api/Interface.IFileResourceStrategyConfig.md +73 -0
- package/data/packages/platform-core/api/Interface.IHealthCheckResult.md +47 -0
- package/data/packages/platform-core/api/Interface.IHealthIndicator.md +42 -0
- package/data/packages/platform-core/api/Interface.IHostContentParams.md +233 -0
- package/data/packages/platform-core/api/Interface.IIdGenerator.md +58 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceArtifact.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCapability.md +62 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCapabilityMetadata.md +61 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCapabilityPayload.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCapabilityRegistry.md +69 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCapabilityResult.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceCompletionUsage.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceContext.md +63 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceContextBuilder.md +32 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceConversationMessageSnapshot.md +61 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceConversationSnapshot.md +51 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceFollowUpQuestion.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceIntent.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceIntentEntity.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceMessageModel.md +61 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceMessagePayload.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligencePrompt.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligencePromptMessage.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceProviderConfiguration.md +81 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceResponseMessage.md +31 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceTextCompletion.md +53 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceTextGenerationOptions.md +41 -0
- package/data/packages/platform-core/api/Interface.IIntelligenceTextGenerator.md +46 -0
- package/data/packages/platform-core/api/Interface.ILayeredCache.md +194 -0
- package/data/packages/platform-core/api/Interface.ILayeredCacheOptions.md +71 -0
- package/data/packages/platform-core/api/Interface.IMappingBuilder.md +77 -0
- package/data/packages/platform-core/api/Interface.IMappingKey.md +59 -0
- package/data/packages/platform-core/api/Interface.IMappingProfile.md +33 -0
- package/data/packages/platform-core/api/Interface.IOtpService.md +78 -0
- package/data/packages/platform-core/api/Interface.IOtpUriOptions.md +47 -0
- package/data/packages/platform-core/api/Interface.IRedisLayeredCacheOptions.md +108 -0
- package/data/packages/platform-core/api/Interface.IResourceManagerConfig.md +72 -0
- package/data/packages/platform-core/api/Interface.IResourceMetadata.md +95 -0
- package/data/packages/platform-core/api/Interface.IResourceResult.md +35 -0
- package/data/packages/platform-core/api/Interface.IResourceStrategy.md +135 -0
- package/data/packages/platform-core/api/Interface.ISseEventData.md +37 -0
- package/data/packages/platform-core/api/Interface.ISseHub.md +92 -0
- package/data/packages/platform-core/api/Namespace.ISseEventData.md +34 -0
- package/data/packages/platform-core/api/TypeAlias.CamelCase.md +19 -0
- package/data/packages/platform-core/api/TypeAlias.IntelligenceConversationMessageRole.md +16 -0
- package/data/packages/platform-core/api/TypeAlias.IntelligenceProviderName.md +15 -0
- package/data/packages/platform-core/api/TypeAlias.ProblemDetail.md +29 -0
- package/data/packages/platform-core/api/TypeAlias.ProblemDetailTypeUrlResolver.md +26 -0
- package/data/packages/platform-core/api/TypeAlias.SetOptional.md +22 -0
- package/data/packages/platform-core/api/TypeAlias.StringValue.md +13 -0
- package/data/packages/platform-core/api/index.md +645 -0
- package/data/packages/platform-core/index.md +483 -0
- package/data/packages/platform-database/api/Class.DatabaseHealthIndicator.md +80 -0
- package/data/packages/platform-database/api/Class.DatabaseModule.md +75 -0
- package/data/packages/platform-database/api/Class.DatabaseService.md +165 -0
- package/data/packages/platform-database/api/Class.PrismaService.md +116 -0
- package/data/packages/platform-database/api/Class.RepositoryBase.md +526 -0
- package/data/packages/platform-database/api/Class.RepositoryExceptionFilter.md +60 -0
- package/data/packages/platform-database/api/Interface.IDatabaseModuleConfig.md +27 -0
- package/data/packages/platform-database/api/Interface.IPaginateOptions.md +33 -0
- package/data/packages/platform-database/api/Interface.IPaginatedResult.md +82 -0
- package/data/packages/platform-database/api/Interface.IRepositoryQuery.md +56 -0
- package/data/packages/platform-database/api/Interface.ITransactionalRepositoryQuery.md +55 -0
- package/data/packages/platform-database/api/TypeAlias.DelegateArgs.md +23 -0
- package/data/packages/platform-database/api/TypeAlias.DelegateReturnTypes.md +23 -0
- package/data/packages/platform-database/api/TypeAlias.PaginateFunction.md +36 -0
- package/data/packages/platform-database/api/TypeAlias.QueryResultType.md +32 -0
- package/data/packages/platform-database/api/TypeAlias.TransactionalQueryResultType.md +31 -0
- package/data/packages/platform-database/api/index.md +183 -0
- package/data/packages/platform-database/index.md +300 -0
- package/data/packages/platform-documents/api/Class.BaseDocumentRenderer.md +103 -0
- package/data/packages/platform-documents/api/Class.DocumentEngine.md +85 -0
- package/data/packages/platform-documents/api/Class.DocumentModule.md +52 -0
- package/data/packages/platform-documents/api/Class.SharpImageProcessor.md +136 -0
- package/data/packages/platform-documents/api/Interface.IDocumentModuleOptions.md +100 -0
- package/data/packages/platform-documents/api/Interface.IDocumentPlaceholderDetail.md +75 -0
- package/data/packages/platform-documents/api/Interface.IDocumentProbeReport.md +123 -0
- package/data/packages/platform-documents/api/Interface.IDocumentRenderer.md +52 -0
- package/data/packages/platform-documents/api/Interface.IImagePayload.md +63 -0
- package/data/packages/platform-documents/api/Interface.IImageProcessor.md +100 -0
- package/data/packages/platform-documents/api/Interface.IRenderOptions.md +69 -0
- package/data/packages/platform-documents/api/Interface.IRenderResult.md +63 -0
- package/data/packages/platform-documents/api/TypeAlias.DocumentFormat.md +19 -0
- package/data/packages/platform-documents/api/TypeAlias.EngineType.md +19 -0
- package/data/packages/platform-documents/api/TypeAlias.ImageMimeType.md +19 -0
- package/data/packages/platform-documents/api/TypeAlias.TemplateFormat.md +19 -0
- package/data/packages/platform-documents/api/TypeAlias.TemplateType.md +19 -0
- package/data/packages/platform-documents/api/index.md +91 -0
- package/data/packages/platform-documents/index.md +219 -0
- package/data/packages/platform-logging/api/Class.AnalyticsService.md +113 -0
- package/data/packages/platform-logging/api/Class.LoggerModule.md +25 -0
- package/data/packages/platform-logging/api/index.md +42 -0
- package/data/packages/platform-logging/index.md +92 -0
- package/data/packages/platform-mailing/api/Class.BlobTemplateFetchStrategy.md +67 -0
- package/data/packages/platform-mailing/api/Class.DeliveryStrategyBase.md +55 -0
- package/data/packages/platform-mailing/api/Class.FileTemplateFetchStrategy.md +65 -0
- package/data/packages/platform-mailing/api/Class.LogDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.MailHealthIndicator.md +83 -0
- package/data/packages/platform-mailing/api/Class.MailModule.md +27 -0
- package/data/packages/platform-mailing/api/Class.MailService.md +101 -0
- package/data/packages/platform-mailing/api/Class.MailTemplateEngine.md +98 -0
- package/data/packages/platform-mailing/api/Class.MailVerificationService.md +90 -0
- package/data/packages/platform-mailing/api/Class.MailgunDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.PostmarkDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.ResendDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.SendGridDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.SmtpDeliveryStrategy.md +82 -0
- package/data/packages/platform-mailing/api/Class.TemplateFetchStrategyBase.md +42 -0
- package/data/packages/platform-mailing/api/Interface.IMailEvents.md +71 -0
- package/data/packages/platform-mailing/api/Interface.IMailTemplateVariants.md +35 -0
- package/data/packages/platform-mailing/api/TypeAlias.MailTemplateFormat.md +19 -0
- package/data/packages/platform-mailing/api/index.md +404 -0
- package/data/packages/platform-mailing/index.md +335 -0
- package/data/packages/platform-mcp/api/Class.McpDiscoveryService.md +65 -0
- package/data/packages/platform-mcp/api/Class.McpModule.md +83 -0
- package/data/packages/platform-mcp/api/Class.McpRegistryService.md +147 -0
- package/data/packages/platform-mcp/api/Class.McpServerService.md +197 -0
- package/data/packages/platform-mcp/api/Interface.IMcpHandlerMetadata.md +47 -0
- package/data/packages/platform-mcp/api/Interface.IMcpModuleAsyncOptions.md +76 -0
- package/data/packages/platform-mcp/api/Interface.IMcpModuleOptions.md +126 -0
- package/data/packages/platform-mcp/api/Interface.IMcpModuleOptionsFactory.md +28 -0
- package/data/packages/platform-mcp/api/Interface.IMcpPromptMetadata.md +59 -0
- package/data/packages/platform-mcp/api/Interface.IMcpResourceMetadata.md +73 -0
- package/data/packages/platform-mcp/api/Interface.IMcpToolMetadata.md +83 -0
- package/data/packages/platform-mcp/api/Interface.IRegisteredPrompt.md +41 -0
- package/data/packages/platform-mcp/api/Interface.IRegisteredResource.md +41 -0
- package/data/packages/platform-mcp/api/Interface.IRegisteredTool.md +41 -0
- package/data/packages/platform-mcp/api/Interface.ISseTransportOptions.md +23 -0
- package/data/packages/platform-mcp/api/Interface.IStreamableHttpTransportOptions.md +39 -0
- package/data/packages/platform-mcp/api/index.md +123 -0
- package/data/packages/platform-mcp/index.md +299 -0
- package/data/packages/platform-openapi/api/Class.SwaggerFeatureDiscovery.md +71 -0
- package/data/packages/platform-openapi/api/Class.SwaggerFeatureRegistry.md +104 -0
- package/data/packages/platform-openapi/api/Class.SwaggerMultiDocumentService.md +82 -0
- package/data/packages/platform-openapi/api/Class.SwaggerTheme.md +51 -0
- package/data/packages/platform-openapi/api/Interface.IFeatureSwaggerConfig.md +73 -0
- package/data/packages/platform-openapi/api/Interface.ISwaggerFeatureMetadata.md +73 -0
- package/data/packages/platform-openapi/api/index.md +209 -0
- package/data/packages/platform-openapi/index.md +170 -0
- package/data/packages/platform-payments/api/Class.FeatureAccessPort.md +79 -0
- package/data/packages/platform-payments/api/Class.FeatureGuard.md +73 -0
- package/data/packages/platform-payments/api/Class.FeatureUsageInterceptor.md +74 -0
- package/data/packages/platform-payments/api/Class.LemonSqueezyClient.md +168 -0
- package/data/packages/platform-payments/api/Class.MollieClient.md +168 -0
- package/data/packages/platform-payments/api/Class.PaddleClient.md +168 -0
- package/data/packages/platform-payments/api/Class.PaymentClientPort.md +147 -0
- package/data/packages/platform-payments/api/Class.PaymentModule.md +53 -0
- package/data/packages/platform-payments/api/Class.StripeClient.md +168 -0
- package/data/packages/platform-payments/api/Interface.IFeatureAccessResult.md +75 -0
- package/data/packages/platform-payments/api/Interface.INormalizedCheckoutSession.md +75 -0
- package/data/packages/platform-payments/api/Interface.INormalizedPrice.md +85 -0
- package/data/packages/platform-payments/api/Interface.INormalizedSubscription.md +105 -0
- package/data/packages/platform-payments/api/Interface.INormalizedWebhookEvent.md +89 -0
- package/data/packages/platform-payments/api/Interface.IPaymentModuleOptions.md +65 -0
- package/data/packages/platform-payments/api/TypeAlias.SubscriptionStatus.md +27 -0
- package/data/packages/platform-payments/api/index.md +243 -0
- package/data/packages/platform-payments/index.md +532 -0
- package/data/packages/platform-reporting/api/Class.ReportingContributorRegistry.md +57 -0
- package/data/packages/platform-reporting/api/Class.ReportingDatasetNotFoundError.md +41 -0
- package/data/packages/platform-reporting/api/Class.ReportingFacade.md +85 -0
- package/data/packages/platform-reporting/api/Class.ReportingModule.md +23 -0
- package/data/packages/platform-reporting/api/Interface.IReportingContributor.md +62 -0
- package/data/packages/platform-reporting/api/Interface.IReportingDataset.md +83 -0
- package/data/packages/platform-reporting/api/Interface.IReportingDatasetField.md +71 -0
- package/data/packages/platform-reporting/api/Interface.IReportingQuery.md +61 -0
- package/data/packages/platform-reporting/api/Interface.IReportingQueryFilter.md +41 -0
- package/data/packages/platform-reporting/api/Interface.IReportingQueryResult.md +61 -0
- package/data/packages/platform-reporting/api/Interface.IReportingQuerySort.md +31 -0
- package/data/packages/platform-reporting/api/TypeAlias.ReportingFieldType.md +13 -0
- package/data/packages/platform-reporting/api/TypeAlias.ReportingFilterOperator.md +13 -0
- package/data/packages/platform-reporting/api/TypeAlias.ReportingQueryResultRow.md +15 -0
- package/data/packages/platform-reporting/api/index.md +90 -0
- package/data/packages/platform-reporting/index.md +229 -0
- package/data/packages/platform-telemetry/api/Class.NoopTelemetryFacade.md +118 -0
- package/data/packages/platform-telemetry/api/Class.TelemetryCacheMetricsRecorder.md +180 -0
- package/data/packages/platform-telemetry/api/Class.TelemetryFacade.md +132 -0
- package/data/packages/platform-telemetry/api/Class.TelemetryLoggerService.md +231 -0
- package/data/packages/platform-telemetry/api/Class.TelemetryModule.md +45 -0
- package/data/packages/platform-telemetry/api/Class.TelemetryRuleEngine.md +53 -0
- package/data/packages/platform-telemetry/api/Interface.ITelemetryFacade.md +90 -0
- package/data/packages/platform-telemetry/api/Interface.ITelemetryMetricsOptions.md +43 -0
- package/data/packages/platform-telemetry/api/Interface.ITelemetryOptions.md +141 -0
- package/data/packages/platform-telemetry/api/Interface.ITelemetryTracesOptions.md +43 -0
- package/data/packages/platform-telemetry/api/index.md +81 -0
- package/data/packages/platform-telemetry/index.md +234 -0
- package/package.json +39 -0
- package/src/DocsLoader.d.ts +14 -0
- package/src/DocsLoader.js +103 -0
- package/src/knowledge/configPattern.d.ts +5 -0
- package/src/knowledge/configPattern.js +211 -0
- package/src/knowledge/dtoPattern.d.ts +5 -0
- package/src/knowledge/dtoPattern.js +286 -0
- package/src/knowledge/errorHandlingPattern.d.ts +5 -0
- package/src/knowledge/errorHandlingPattern.js +219 -0
- package/src/knowledge/guardPattern.d.ts +5 -0
- package/src/knowledge/guardPattern.js +256 -0
- package/src/knowledge/mappingPattern.d.ts +6 -0
- package/src/knowledge/mappingPattern.js +322 -0
- package/src/knowledge/modulePattern.d.ts +6 -0
- package/src/knowledge/modulePattern.js +283 -0
- package/src/knowledge/queryPattern.d.ts +6 -0
- package/src/knowledge/queryPattern.js +215 -0
- package/src/knowledge/repositoryPattern.d.ts +6 -0
- package/src/knowledge/repositoryPattern.js +367 -0
- package/src/knowledge/testingPattern.d.ts +5 -0
- package/src/knowledge/testingPattern.js +356 -0
- package/src/main.d.ts +2 -0
- package/src/main.js +226 -0
- package/src/models/IPackageDoc.d.ts +19 -0
- package/src/models/IPackageDoc.js +3 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Static knowledge content for the Archipel configuration pattern.
|
|
4
|
+
* Returned by the get-config-pattern tool.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CONFIG_PATTERN_KNOWLEDGE = void 0;
|
|
8
|
+
exports.CONFIG_PATTERN_KNOWLEDGE = `# Archipel Configuration Pattern
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Archipel uses a **typed configuration key** system with a **central registry**.
|
|
13
|
+
Each platform library declares its required and optional config keys in an \`env.ts\`
|
|
14
|
+
file, which are registered into the global \`ConfigRegistry\`. At runtime, the
|
|
15
|
+
\`ConfigService\` resolves values through a pluggable strategy (environment variables,
|
|
16
|
+
Azure App Configuration, etc.).
|
|
17
|
+
|
|
18
|
+
**Rule:** No direct \`process.env\` access outside of config strategy implementations.
|
|
19
|
+
|
|
20
|
+
## Core Types
|
|
21
|
+
|
|
22
|
+
### IConfigKey<TType>
|
|
23
|
+
|
|
24
|
+
\`\`\`typescript
|
|
25
|
+
export interface IConfigKey<TType = unknown> {
|
|
26
|
+
readonly _type?: TType; // Phantom type for compile-time safety
|
|
27
|
+
readonly key: string; // The actual config key string
|
|
28
|
+
}
|
|
29
|
+
\`\`\`
|
|
30
|
+
|
|
31
|
+
### createConfigKey<TType>
|
|
32
|
+
|
|
33
|
+
\`\`\`typescript
|
|
34
|
+
import { createConfigKey } from '@breadstone/archipel-platform-core';
|
|
35
|
+
|
|
36
|
+
export const APP_URL = createConfigKey<string>('APP_URL');
|
|
37
|
+
export const APP_PORT = createConfigKey<number>('APP_PORT');
|
|
38
|
+
export const FEATURE_ENABLED = createConfigKey<boolean>('FEATURE_ENABLED');
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
## ConfigService API
|
|
42
|
+
|
|
43
|
+
\`\`\`typescript
|
|
44
|
+
@Injectable()
|
|
45
|
+
export class ConfigService {
|
|
46
|
+
|
|
47
|
+
// Throws if key not found
|
|
48
|
+
public get<T>(key: string): T;
|
|
49
|
+
|
|
50
|
+
// Returns fallback if key not found
|
|
51
|
+
public tryGet<T>(key: string, fallback: T): T;
|
|
52
|
+
|
|
53
|
+
// Compares a key's value to an expected value
|
|
54
|
+
public compare<T>(key: string, value: T): boolean;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
**Auto-parsing:** String values are automatically converted:
|
|
60
|
+
- \`'true'\` / \`'false'\` → \`boolean\`
|
|
61
|
+
- Numeric strings → \`number\`
|
|
62
|
+
- Empty strings → \`null\`
|
|
63
|
+
|
|
64
|
+
## ConfigRegistry
|
|
65
|
+
|
|
66
|
+
A static global registry that collects all declared config keys at module initialization.
|
|
67
|
+
|
|
68
|
+
\`\`\`typescript
|
|
69
|
+
export class ConfigRegistry {
|
|
70
|
+
|
|
71
|
+
// Register keys for a module
|
|
72
|
+
public static register(module: string, entries: ReadonlyArray<Omit<IConfigRegistryEntry, 'module'>>): void;
|
|
73
|
+
|
|
74
|
+
// Query all registered entries
|
|
75
|
+
public static getAll(): ReadonlyArray<IConfigRegistryEntry>;
|
|
76
|
+
public static getByModule(): ReadonlyMap<string, ReadonlyArray<IConfigRegistryEntry>>;
|
|
77
|
+
public static getRequired(): ReadonlyArray<IConfigRegistryEntry>;
|
|
78
|
+
public static getModules(): ReadonlyArray<string>;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
\`\`\`
|
|
82
|
+
|
|
83
|
+
### IConfigRegistryEntry
|
|
84
|
+
|
|
85
|
+
\`\`\`typescript
|
|
86
|
+
export interface IConfigRegistryEntry<TType = unknown> {
|
|
87
|
+
readonly key: IConfigKey<TType>;
|
|
88
|
+
readonly module: string;
|
|
89
|
+
readonly required: boolean;
|
|
90
|
+
readonly defaultValue?: TType;
|
|
91
|
+
readonly description?: string;
|
|
92
|
+
}
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
## How to Add Configuration to a Library
|
|
96
|
+
|
|
97
|
+
### Step 1: Define typed config keys in env.ts
|
|
98
|
+
|
|
99
|
+
\`\`\`typescript
|
|
100
|
+
// src/env.ts
|
|
101
|
+
import { createConfigKey } from '@breadstone/archipel-platform-core';
|
|
102
|
+
import { ConfigRegistry, IConfigRegistryEntry } from '@breadstone/archipel-platform-core';
|
|
103
|
+
|
|
104
|
+
// ──────────────────────────────────────────────────────────────
|
|
105
|
+
// Keys
|
|
106
|
+
// ──────────────────────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
export const STRIPE_SECRET_KEY = createConfigKey<string>('STRIPE_SECRET_KEY');
|
|
109
|
+
export const STRIPE_WEBHOOK_SECRET = createConfigKey<string>('STRIPE_WEBHOOK_SECRET');
|
|
110
|
+
export const PAYMENT_CURRENCY = createConfigKey<string>('PAYMENT_CURRENCY');
|
|
111
|
+
|
|
112
|
+
// ──────────────────────────────────────────────────────────────
|
|
113
|
+
// Registry entries
|
|
114
|
+
// ──────────────────────────────────────────────────────────────
|
|
115
|
+
|
|
116
|
+
export const PLATFORM_PAYMENTS_CONFIG_ENTRIES: ReadonlyArray<Omit<IConfigRegistryEntry, 'module'>> = [
|
|
117
|
+
{ key: STRIPE_SECRET_KEY, required: true, description: 'Stripe API secret key.' },
|
|
118
|
+
{ key: STRIPE_WEBHOOK_SECRET, required: true, description: 'Stripe webhook signing secret.' },
|
|
119
|
+
{ key: PAYMENT_CURRENCY, required: false, defaultValue: 'EUR', description: 'Default payment currency.' },
|
|
120
|
+
];
|
|
121
|
+
\`\`\`
|
|
122
|
+
|
|
123
|
+
### Step 2: Register in ConfigModule
|
|
124
|
+
|
|
125
|
+
\`\`\`typescript
|
|
126
|
+
// In the module's register() method:
|
|
127
|
+
imports: [ConfigModule.register('platform-payments', PLATFORM_PAYMENTS_CONFIG_ENTRIES)]
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
Or for libraries without a dedicated module (self-registration):
|
|
131
|
+
|
|
132
|
+
\`\`\`typescript
|
|
133
|
+
// At the bottom of env.ts:
|
|
134
|
+
ConfigRegistry.register('platform-payments', PLATFORM_PAYMENTS_CONFIG_ENTRIES);
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
### Step 3: Use in services
|
|
138
|
+
|
|
139
|
+
\`\`\`typescript
|
|
140
|
+
@Injectable()
|
|
141
|
+
export class StripeClient {
|
|
142
|
+
|
|
143
|
+
private readonly _configService: ConfigService;
|
|
144
|
+
|
|
145
|
+
public constructor(configService: ConfigService) {
|
|
146
|
+
this._configService = configService;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private getApiKey(): string {
|
|
150
|
+
return this._configService.get<string>('STRIPE_SECRET_KEY');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
\`\`\`
|
|
155
|
+
|
|
156
|
+
## ConfigModule
|
|
157
|
+
|
|
158
|
+
### register() — Per-library config registration
|
|
159
|
+
|
|
160
|
+
Declares which config keys a library needs. Used in \`imports\` of feature modules.
|
|
161
|
+
|
|
162
|
+
\`\`\`typescript
|
|
163
|
+
ConfigModule.register('platform-authentication', PLATFORM_AUTHENTICATION_CONFIG_ENTRIES)
|
|
164
|
+
\`\`\`
|
|
165
|
+
|
|
166
|
+
### forRoot() — Application bootstrap
|
|
167
|
+
|
|
168
|
+
Configures the global strategy and static overrides. Used once in the root module.
|
|
169
|
+
|
|
170
|
+
\`\`\`typescript
|
|
171
|
+
ConfigModule.forRoot({
|
|
172
|
+
strategyFactory: () => new EnvironmentConfigStrategy(),
|
|
173
|
+
statics: { APP_VERSION: '1.0.0' },
|
|
174
|
+
})
|
|
175
|
+
\`\`\`
|
|
176
|
+
|
|
177
|
+
## ConfigStrategyBase
|
|
178
|
+
|
|
179
|
+
Pluggable strategy for resolving config values:
|
|
180
|
+
|
|
181
|
+
\`\`\`typescript
|
|
182
|
+
export abstract class ConfigStrategyBase {
|
|
183
|
+
public abstract initialize(): void;
|
|
184
|
+
public abstract resolve<T>(key: string): T;
|
|
185
|
+
public abstract tryResolve<T>(key: string, fallback: T): T;
|
|
186
|
+
public abstract has(key: string): boolean;
|
|
187
|
+
}
|
|
188
|
+
\`\`\`
|
|
189
|
+
|
|
190
|
+
Implementations can read from environment variables, Azure App Configuration, Consul, etc.
|
|
191
|
+
|
|
192
|
+
## Existing Config Modules
|
|
193
|
+
|
|
194
|
+
| Module | Prefix | Example Keys |
|
|
195
|
+
|--------|--------|-------------|
|
|
196
|
+
| platform-core | APP_, NODE_ENV, INTELLIGENCE_ | APP_URL, APP_PORT, APP_VERSION, INTELLIGENCE_MODEL |
|
|
197
|
+
| platform-authentication | AUTH_ | AUTH_JWT_SECRET, AUTH_JWT_EXPIRES_IN |
|
|
198
|
+
| platform-payments | STRIPE_ | STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET |
|
|
199
|
+
| platform-openapi | SWAGGER_ | SWAGGER_CONTACT_NAME, SWAGGER_CONTACT_URL |
|
|
200
|
+
|
|
201
|
+
## Rules
|
|
202
|
+
|
|
203
|
+
1. **All config keys defined via \`createConfigKey<T>()\`** — never raw \`process.env\` access.
|
|
204
|
+
2. **Each library declares entries in \`env.ts\`** with required flag, default value, and description.
|
|
205
|
+
3. **Registration via \`ConfigModule.register()\`** in the module, or self-registration for libraries without modules.
|
|
206
|
+
4. **\`ConfigService.get()\` throws on missing required keys** — fail-fast at startup.
|
|
207
|
+
5. **Use \`tryGet()\` with fallback** for optional keys.
|
|
208
|
+
6. **Config key names use UPPER_SNAKE_CASE** matching environment variable conventions.
|
|
209
|
+
7. **Group related keys** with comment separators in env.ts.
|
|
210
|
+
`;
|
|
211
|
+
//# sourceMappingURL=configPattern.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static knowledge content for the Archipel DTO & validation pattern.
|
|
3
|
+
* Returned by the get-dto-pattern tool.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DTO_PATTERN_KNOWLEDGE = "# Archipel DTO & Validation Pattern\n\n## Overview\n\nArchipel uses **class-based DTOs** with **class-validator** decorators for input validation\nand **class-transformer** decorators for serialization control. A global `ValidationPipe`\nenforces validation on all incoming requests automatically.\n\nRequest DTOs validate input; Response classes define the output shape with\n`@ApiProperty` decorators for OpenAPI documentation.\n\n## Global Validation Pipe\n\n```typescript\n// In main.ts bootstrap:\napp.useGlobalPipes(\n new ValidationPipe({\n whitelist: true, // Strip unknown properties\n forbidNonWhitelisted: true, // Throw on unknown properties\n transform: true, // Auto-transform payloads to DTO instances\n }),\n);\n```\n\n## Request DTO (Input Validation)\n\n```typescript\n// dtos/CreateUserRequest.ts\nimport { Expose } from 'class-transformer';\nimport { IsEmail, IsString, MinLength, MaxLength } from 'class-validator';\nimport { ApiProperty } from '@nestjs/swagger';\n\nexport class CreateUserRequest {\n\n @Expose()\n @IsEmail()\n @ApiProperty({ example: 'user@example.com', description: 'User email address' })\n public email!: string;\n\n @Expose()\n @IsString()\n @MinLength(3)\n @MaxLength(50)\n @ApiProperty({ description: 'Display name' })\n public name!: string;\n\n @Expose()\n @IsString()\n @MinLength(8)\n @ApiProperty({ description: 'Password (min 8 characters)' })\n public password!: string;\n\n}\n```\n\n## Response DTO (Output Shape)\n\n```typescript\n// dtos/UserResponse.ts\nimport { Expose } from 'class-transformer';\nimport { ApiProperty } from '@nestjs/swagger';\n\nexport class UserResponse {\n\n @Expose()\n @ApiProperty({ description: 'Unique identifier' })\n public id!: string;\n\n @Expose()\n @ApiProperty({ description: 'User email address' })\n public email!: string;\n\n @Expose()\n @ApiProperty({ description: 'Display name' })\n public name!: string;\n\n @Expose()\n @ApiProperty({ description: 'Account creation date' })\n public createdAt!: Date;\n\n // Note: password is intentionally NOT exposed\n\n}\n```\n\n## Common Validators\n\n### Basic Types\n\n| Decorator | Purpose |\n|-----------|---------|\n| `@IsString()` | Must be a string |\n| `@IsNumber()` | Must be a number |\n| `@IsBoolean()` | Must be a boolean |\n| `@IsEmail()` | Must be a valid email |\n| `@IsUUID()` | Must be a valid UUID |\n| `@IsDate()` | Must be a Date instance |\n| `@IsEnum(MyEnum)` | Must be a value from the enum |\n| `@IsOptional()` | Field is optional (skip validation if undefined) |\n\n### String Constraints\n\n| Decorator | Purpose |\n|-----------|---------|\n| `@MinLength(n)` | Minimum string length |\n| `@MaxLength(n)` | Maximum string length |\n| `@Matches(regex)` | Must match a regex pattern |\n| `@IsNotEmpty()` | Must not be empty string |\n\n### Number Constraints\n\n| Decorator | Purpose |\n|-----------|---------|\n| `@Min(n)` | Minimum value |\n| `@Max(n)` | Maximum value |\n| `@IsPositive()` | Must be > 0 |\n| `@IsInt()` | Must be integer |\n\n### Nested & Array\n\n| Decorator | Purpose |\n|-----------|---------|\n| `@ValidateNested()` | Validate nested objects |\n| `@Type(() => Cls)` | Transform to class instance (class-transformer) |\n| `@IsArray()` | Must be an array |\n| `@ArrayMinSize(n)` | Minimum array length |\n| `@ArrayMaxSize(n)` | Maximum array length |\n\n## Cross-Field Validation\n\nFor fields that depend on each other, use custom class-level validators:\n\n```typescript\nimport { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments, Validate } from 'class-validator';\n\n@ValidatorConstraint({ name: 'Match', async: false })\nexport class MatchConstraint implements ValidatorConstraintInterface {\n\n public validate(value: unknown, args: ValidationArguments): boolean {\n const [relatedPropertyName] = args.constraints;\n const relatedValue = (args.object as Record<string, unknown>)[relatedPropertyName];\n\n return value === relatedValue;\n }\n\n public defaultMessage(args: ValidationArguments): string {\n const [relatedPropertyName] = args.constraints;\n\n return \\`\\${args.property} must match \\${relatedPropertyName}\\`;\n }\n\n}\n\n// Usage in DTO:\nexport class ResetPasswordRequest {\n\n @Expose()\n @IsString()\n @MinLength(8)\n public password!: string;\n\n @Expose()\n @IsString()\n @Validate(MatchConstraint, ['password'])\n public confirmPassword!: string;\n\n}\n```\n\n## Query Parameter DTOs\n\nFor GET request query parameters, use `@Transform()` and `@Type()` for type coercion:\n\n```typescript\nimport { Type } from 'class-transformer';\nimport { IsOptional, IsInt, Min, Max, IsString } from 'class-validator';\nimport { ApiPropertyOptional } from '@nestjs/swagger';\n\nexport class PaginationQuery {\n\n @IsOptional()\n @Type(() => Number)\n @IsInt()\n @Min(1)\n @ApiPropertyOptional({ default: 1 })\n public page?: number = 1;\n\n @IsOptional()\n @Type(() => Number)\n @IsInt()\n @Min(1)\n @Max(100)\n @ApiPropertyOptional({ default: 20 })\n public perPage?: number = 20;\n\n @IsOptional()\n @IsString()\n @ApiPropertyOptional()\n public search?: string;\n\n}\n```\n\n## OpenAPI / Swagger Integration\n\n### @ApiProperty Decorators\n\n```typescript\n@ApiProperty({\n description: 'User email address',\n example: 'user@example.com',\n required: true,\n})\npublic email!: string;\n\n@ApiPropertyOptional({\n description: 'Profile bio',\n maxLength: 500,\n})\npublic bio?: string;\n```\n\n### Controller Response Decorators\n\n```typescript\n@Controller('/users')\n@ApiTags('Users')\nexport class UsersController {\n\n @Post()\n @HttpCode(HttpStatus.CREATED)\n @ApiOperation({ summary: 'Create a new user' })\n @ApiResponse({ status: 201, description: 'User created', type: UserResponse })\n @ApiResponse({ status: 400, description: 'Validation error' })\n public async createUser(@Body() body: CreateUserRequest): Promise<UserResponse> {\n // ...\n }\n\n}\n```\n\n## Naming Conventions\n\n| Type | Naming Pattern | Example |\n|------|---------------|---------|\n| Create input | `Create{Entity}Request` | `CreateUserRequest` |\n| Update input | `Update{Entity}Request` | `UpdateUserRequest` |\n| Query params | `{Entity}Query` or `Pagination{Entity}Query` | `UserQuery` |\n| Response | `{Entity}Response` | `UserResponse` |\n| List response | `{Entity}ListResponse` | `UserListResponse` |\n\n## Constants for Bounds\n\nDefine and reuse constants for upper limits:\n\n```typescript\n// constants/ValidationConstants.ts\nexport const MAX_PAGE_SIZE = 100;\nexport const MAX_SEARCH_LIMIT = 50;\nexport const MAX_NAME_LENGTH = 100;\nexport const MAX_BIO_LENGTH = 500;\n\n// In DTO:\n@Max(MAX_PAGE_SIZE)\npublic perPage?: number;\n```\n\n## Rules\n\n1. **Every field has `@Expose()`** for serialization control.\n2. **Every field has `@ApiProperty()`** for OpenAPI documentation.\n3. **Request DTOs use class-validator decorators** \u2014 validation is automatic via global pipe.\n4. **Response DTOs have no validation decorators** \u2014 they're output-only shapes.\n5. **Cross-field validation uses custom class-level validators** \u2014 never imperative checks in services.\n6. **Query parameters use `@Type(() => Number)`** for type coercion from strings.\n7. **Upper bounds (`@Max`, `@MaxLength`) defined as exported constants** \u2014 never inline magic numbers.\n8. **`whitelist: true` + `forbidNonWhitelisted: true`** strips and rejects unknown properties.\n";
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Static knowledge content for the Archipel DTO & validation pattern.
|
|
4
|
+
* Returned by the get-dto-pattern tool.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DTO_PATTERN_KNOWLEDGE = void 0;
|
|
8
|
+
exports.DTO_PATTERN_KNOWLEDGE = `# Archipel DTO & Validation Pattern
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Archipel uses **class-based DTOs** with **class-validator** decorators for input validation
|
|
13
|
+
and **class-transformer** decorators for serialization control. A global \`ValidationPipe\`
|
|
14
|
+
enforces validation on all incoming requests automatically.
|
|
15
|
+
|
|
16
|
+
Request DTOs validate input; Response classes define the output shape with
|
|
17
|
+
\`@ApiProperty\` decorators for OpenAPI documentation.
|
|
18
|
+
|
|
19
|
+
## Global Validation Pipe
|
|
20
|
+
|
|
21
|
+
\`\`\`typescript
|
|
22
|
+
// In main.ts bootstrap:
|
|
23
|
+
app.useGlobalPipes(
|
|
24
|
+
new ValidationPipe({
|
|
25
|
+
whitelist: true, // Strip unknown properties
|
|
26
|
+
forbidNonWhitelisted: true, // Throw on unknown properties
|
|
27
|
+
transform: true, // Auto-transform payloads to DTO instances
|
|
28
|
+
}),
|
|
29
|
+
);
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
## Request DTO (Input Validation)
|
|
33
|
+
|
|
34
|
+
\`\`\`typescript
|
|
35
|
+
// dtos/CreateUserRequest.ts
|
|
36
|
+
import { Expose } from 'class-transformer';
|
|
37
|
+
import { IsEmail, IsString, MinLength, MaxLength } from 'class-validator';
|
|
38
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
39
|
+
|
|
40
|
+
export class CreateUserRequest {
|
|
41
|
+
|
|
42
|
+
@Expose()
|
|
43
|
+
@IsEmail()
|
|
44
|
+
@ApiProperty({ example: 'user@example.com', description: 'User email address' })
|
|
45
|
+
public email!: string;
|
|
46
|
+
|
|
47
|
+
@Expose()
|
|
48
|
+
@IsString()
|
|
49
|
+
@MinLength(3)
|
|
50
|
+
@MaxLength(50)
|
|
51
|
+
@ApiProperty({ description: 'Display name' })
|
|
52
|
+
public name!: string;
|
|
53
|
+
|
|
54
|
+
@Expose()
|
|
55
|
+
@IsString()
|
|
56
|
+
@MinLength(8)
|
|
57
|
+
@ApiProperty({ description: 'Password (min 8 characters)' })
|
|
58
|
+
public password!: string;
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
## Response DTO (Output Shape)
|
|
64
|
+
|
|
65
|
+
\`\`\`typescript
|
|
66
|
+
// dtos/UserResponse.ts
|
|
67
|
+
import { Expose } from 'class-transformer';
|
|
68
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
69
|
+
|
|
70
|
+
export class UserResponse {
|
|
71
|
+
|
|
72
|
+
@Expose()
|
|
73
|
+
@ApiProperty({ description: 'Unique identifier' })
|
|
74
|
+
public id!: string;
|
|
75
|
+
|
|
76
|
+
@Expose()
|
|
77
|
+
@ApiProperty({ description: 'User email address' })
|
|
78
|
+
public email!: string;
|
|
79
|
+
|
|
80
|
+
@Expose()
|
|
81
|
+
@ApiProperty({ description: 'Display name' })
|
|
82
|
+
public name!: string;
|
|
83
|
+
|
|
84
|
+
@Expose()
|
|
85
|
+
@ApiProperty({ description: 'Account creation date' })
|
|
86
|
+
public createdAt!: Date;
|
|
87
|
+
|
|
88
|
+
// Note: password is intentionally NOT exposed
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
\`\`\`
|
|
92
|
+
|
|
93
|
+
## Common Validators
|
|
94
|
+
|
|
95
|
+
### Basic Types
|
|
96
|
+
|
|
97
|
+
| Decorator | Purpose |
|
|
98
|
+
|-----------|---------|
|
|
99
|
+
| \`@IsString()\` | Must be a string |
|
|
100
|
+
| \`@IsNumber()\` | Must be a number |
|
|
101
|
+
| \`@IsBoolean()\` | Must be a boolean |
|
|
102
|
+
| \`@IsEmail()\` | Must be a valid email |
|
|
103
|
+
| \`@IsUUID()\` | Must be a valid UUID |
|
|
104
|
+
| \`@IsDate()\` | Must be a Date instance |
|
|
105
|
+
| \`@IsEnum(MyEnum)\` | Must be a value from the enum |
|
|
106
|
+
| \`@IsOptional()\` | Field is optional (skip validation if undefined) |
|
|
107
|
+
|
|
108
|
+
### String Constraints
|
|
109
|
+
|
|
110
|
+
| Decorator | Purpose |
|
|
111
|
+
|-----------|---------|
|
|
112
|
+
| \`@MinLength(n)\` | Minimum string length |
|
|
113
|
+
| \`@MaxLength(n)\` | Maximum string length |
|
|
114
|
+
| \`@Matches(regex)\` | Must match a regex pattern |
|
|
115
|
+
| \`@IsNotEmpty()\` | Must not be empty string |
|
|
116
|
+
|
|
117
|
+
### Number Constraints
|
|
118
|
+
|
|
119
|
+
| Decorator | Purpose |
|
|
120
|
+
|-----------|---------|
|
|
121
|
+
| \`@Min(n)\` | Minimum value |
|
|
122
|
+
| \`@Max(n)\` | Maximum value |
|
|
123
|
+
| \`@IsPositive()\` | Must be > 0 |
|
|
124
|
+
| \`@IsInt()\` | Must be integer |
|
|
125
|
+
|
|
126
|
+
### Nested & Array
|
|
127
|
+
|
|
128
|
+
| Decorator | Purpose |
|
|
129
|
+
|-----------|---------|
|
|
130
|
+
| \`@ValidateNested()\` | Validate nested objects |
|
|
131
|
+
| \`@Type(() => Cls)\` | Transform to class instance (class-transformer) |
|
|
132
|
+
| \`@IsArray()\` | Must be an array |
|
|
133
|
+
| \`@ArrayMinSize(n)\` | Minimum array length |
|
|
134
|
+
| \`@ArrayMaxSize(n)\` | Maximum array length |
|
|
135
|
+
|
|
136
|
+
## Cross-Field Validation
|
|
137
|
+
|
|
138
|
+
For fields that depend on each other, use custom class-level validators:
|
|
139
|
+
|
|
140
|
+
\`\`\`typescript
|
|
141
|
+
import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments, Validate } from 'class-validator';
|
|
142
|
+
|
|
143
|
+
@ValidatorConstraint({ name: 'Match', async: false })
|
|
144
|
+
export class MatchConstraint implements ValidatorConstraintInterface {
|
|
145
|
+
|
|
146
|
+
public validate(value: unknown, args: ValidationArguments): boolean {
|
|
147
|
+
const [relatedPropertyName] = args.constraints;
|
|
148
|
+
const relatedValue = (args.object as Record<string, unknown>)[relatedPropertyName];
|
|
149
|
+
|
|
150
|
+
return value === relatedValue;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public defaultMessage(args: ValidationArguments): string {
|
|
154
|
+
const [relatedPropertyName] = args.constraints;
|
|
155
|
+
|
|
156
|
+
return \\\`\\\${args.property} must match \\\${relatedPropertyName}\\\`;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Usage in DTO:
|
|
162
|
+
export class ResetPasswordRequest {
|
|
163
|
+
|
|
164
|
+
@Expose()
|
|
165
|
+
@IsString()
|
|
166
|
+
@MinLength(8)
|
|
167
|
+
public password!: string;
|
|
168
|
+
|
|
169
|
+
@Expose()
|
|
170
|
+
@IsString()
|
|
171
|
+
@Validate(MatchConstraint, ['password'])
|
|
172
|
+
public confirmPassword!: string;
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
\`\`\`
|
|
176
|
+
|
|
177
|
+
## Query Parameter DTOs
|
|
178
|
+
|
|
179
|
+
For GET request query parameters, use \`@Transform()\` and \`@Type()\` for type coercion:
|
|
180
|
+
|
|
181
|
+
\`\`\`typescript
|
|
182
|
+
import { Type } from 'class-transformer';
|
|
183
|
+
import { IsOptional, IsInt, Min, Max, IsString } from 'class-validator';
|
|
184
|
+
import { ApiPropertyOptional } from '@nestjs/swagger';
|
|
185
|
+
|
|
186
|
+
export class PaginationQuery {
|
|
187
|
+
|
|
188
|
+
@IsOptional()
|
|
189
|
+
@Type(() => Number)
|
|
190
|
+
@IsInt()
|
|
191
|
+
@Min(1)
|
|
192
|
+
@ApiPropertyOptional({ default: 1 })
|
|
193
|
+
public page?: number = 1;
|
|
194
|
+
|
|
195
|
+
@IsOptional()
|
|
196
|
+
@Type(() => Number)
|
|
197
|
+
@IsInt()
|
|
198
|
+
@Min(1)
|
|
199
|
+
@Max(100)
|
|
200
|
+
@ApiPropertyOptional({ default: 20 })
|
|
201
|
+
public perPage?: number = 20;
|
|
202
|
+
|
|
203
|
+
@IsOptional()
|
|
204
|
+
@IsString()
|
|
205
|
+
@ApiPropertyOptional()
|
|
206
|
+
public search?: string;
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
\`\`\`
|
|
210
|
+
|
|
211
|
+
## OpenAPI / Swagger Integration
|
|
212
|
+
|
|
213
|
+
### @ApiProperty Decorators
|
|
214
|
+
|
|
215
|
+
\`\`\`typescript
|
|
216
|
+
@ApiProperty({
|
|
217
|
+
description: 'User email address',
|
|
218
|
+
example: 'user@example.com',
|
|
219
|
+
required: true,
|
|
220
|
+
})
|
|
221
|
+
public email!: string;
|
|
222
|
+
|
|
223
|
+
@ApiPropertyOptional({
|
|
224
|
+
description: 'Profile bio',
|
|
225
|
+
maxLength: 500,
|
|
226
|
+
})
|
|
227
|
+
public bio?: string;
|
|
228
|
+
\`\`\`
|
|
229
|
+
|
|
230
|
+
### Controller Response Decorators
|
|
231
|
+
|
|
232
|
+
\`\`\`typescript
|
|
233
|
+
@Controller('/users')
|
|
234
|
+
@ApiTags('Users')
|
|
235
|
+
export class UsersController {
|
|
236
|
+
|
|
237
|
+
@Post()
|
|
238
|
+
@HttpCode(HttpStatus.CREATED)
|
|
239
|
+
@ApiOperation({ summary: 'Create a new user' })
|
|
240
|
+
@ApiResponse({ status: 201, description: 'User created', type: UserResponse })
|
|
241
|
+
@ApiResponse({ status: 400, description: 'Validation error' })
|
|
242
|
+
public async createUser(@Body() body: CreateUserRequest): Promise<UserResponse> {
|
|
243
|
+
// ...
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
\`\`\`
|
|
248
|
+
|
|
249
|
+
## Naming Conventions
|
|
250
|
+
|
|
251
|
+
| Type | Naming Pattern | Example |
|
|
252
|
+
|------|---------------|---------|
|
|
253
|
+
| Create input | \`Create{Entity}Request\` | \`CreateUserRequest\` |
|
|
254
|
+
| Update input | \`Update{Entity}Request\` | \`UpdateUserRequest\` |
|
|
255
|
+
| Query params | \`{Entity}Query\` or \`Pagination{Entity}Query\` | \`UserQuery\` |
|
|
256
|
+
| Response | \`{Entity}Response\` | \`UserResponse\` |
|
|
257
|
+
| List response | \`{Entity}ListResponse\` | \`UserListResponse\` |
|
|
258
|
+
|
|
259
|
+
## Constants for Bounds
|
|
260
|
+
|
|
261
|
+
Define and reuse constants for upper limits:
|
|
262
|
+
|
|
263
|
+
\`\`\`typescript
|
|
264
|
+
// constants/ValidationConstants.ts
|
|
265
|
+
export const MAX_PAGE_SIZE = 100;
|
|
266
|
+
export const MAX_SEARCH_LIMIT = 50;
|
|
267
|
+
export const MAX_NAME_LENGTH = 100;
|
|
268
|
+
export const MAX_BIO_LENGTH = 500;
|
|
269
|
+
|
|
270
|
+
// In DTO:
|
|
271
|
+
@Max(MAX_PAGE_SIZE)
|
|
272
|
+
public perPage?: number;
|
|
273
|
+
\`\`\`
|
|
274
|
+
|
|
275
|
+
## Rules
|
|
276
|
+
|
|
277
|
+
1. **Every field has \`@Expose()\`** for serialization control.
|
|
278
|
+
2. **Every field has \`@ApiProperty()\`** for OpenAPI documentation.
|
|
279
|
+
3. **Request DTOs use class-validator decorators** — validation is automatic via global pipe.
|
|
280
|
+
4. **Response DTOs have no validation decorators** — they're output-only shapes.
|
|
281
|
+
5. **Cross-field validation uses custom class-level validators** — never imperative checks in services.
|
|
282
|
+
6. **Query parameters use \`@Type(() => Number)\`** for type coercion from strings.
|
|
283
|
+
7. **Upper bounds (\`@Max\`, \`@MaxLength\`) defined as exported constants** — never inline magic numbers.
|
|
284
|
+
8. **\`whitelist: true\` + \`forbidNonWhitelisted: true\`** strips and rejects unknown properties.
|
|
285
|
+
`;
|
|
286
|
+
//# sourceMappingURL=dtoPattern.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static knowledge content for the Archipel error handling pattern.
|
|
3
|
+
* Returned by the get-error-handling-pattern tool.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ERROR_HANDLING_PATTERN_KNOWLEDGE = "# Archipel Error Handling Pattern\n\n## Overview\n\nArchipel uses **domain-specific error classes** that are caught by **global exception filters**\nand mapped to structured HTTP responses. Services throw domain errors; the framework handles\nthe HTTP translation. This keeps business logic clean and error responses consistent.\n\n## Layer Architecture\n\n```\nService \u2192 throws DomainError \u2192 ExceptionFilter \u2192 HTTP Response Envelope\n```\n\n## Base Error Classes\n\n### RepositoryError\n\nThrown when any Prisma operation fails. Automatically wrapped by `RepositoryBase.tryCatch()`.\n\n```typescript\n// models/errors/RepositoryError.ts\nexport class RepositoryError extends Error {\n\n public readonly code = 'REPOSITORY_ERROR';\n public readonly originalCode?: string;\n public readonly meta?: Record<string, unknown>;\n\n public constructor(message: string, originalCode?: string, meta?: Record<string, unknown>) {\n super(message);\n Object.setPrototypeOf(this, RepositoryError.prototype);\n this.name = 'RepositoryError';\n this.originalCode = originalCode;\n this.meta = meta;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, RepositoryError);\n }\n }\n\n}\n```\n\n### MappingError (abstract)\n\nBase for mapping-related errors.\n\n```typescript\nexport abstract class MappingError extends Error {\n public readonly code: string;\n\n protected constructor(message: string, code: string) {\n super(message);\n this.code = code;\n }\n}\n```\n\nConcrete variants:\n- `MappingNotRegisteredError` \u2014 code: `'MAPPING_NOT_REGISTERED'`\n- `TypeMappingNotRegisteredError` \u2014 code: `'TYPE_MAPPING_NOT_REGISTERED'`\n\n## Exception Filters\n\n### RepositoryExceptionFilter\n\n```typescript\nimport { ArgumentsHost, Catch, ExceptionFilter, HttpStatus } from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { RepositoryError } from '../models/errors/RepositoryError';\n\n@Catch(RepositoryError)\nexport class RepositoryExceptionFilter implements ExceptionFilter<RepositoryError> {\n\n public catch(_exception: RepositoryError, host: ArgumentsHost): void {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n const request = ctx.getRequest<Request>();\n\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n timestamp: new Date().toISOString(),\n error: 'Repository Error',\n path: request.url,\n });\n }\n\n}\n```\n\n### Registration (in main.ts or AppModule)\n\n```typescript\napp.useGlobalFilters(new RepositoryExceptionFilter());\n```\n\n## How to Create a Domain Error\n\n### Step 1: Define the error class\n\n```typescript\n// models/errors/UserNotFoundError.ts\nexport class UserNotFoundError extends Error {\n\n public readonly code = 'USER_NOT_FOUND';\n public readonly userId: string;\n\n public constructor(userId: string) {\n super(\\`User not found: \\${userId}\\`);\n Object.setPrototypeOf(this, UserNotFoundError.prototype);\n this.name = 'UserNotFoundError';\n this.userId = userId;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, UserNotFoundError);\n }\n }\n\n}\n```\n\n### Step 2: Create an exception filter\n\n```typescript\n// filters/UserNotFoundExceptionFilter.ts\nimport { ArgumentsHost, Catch, ExceptionFilter, HttpStatus } from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { UserNotFoundError } from '../models/errors/UserNotFoundError';\n\n@Catch(UserNotFoundError)\nexport class UserNotFoundExceptionFilter implements ExceptionFilter<UserNotFoundError> {\n\n public catch(exception: UserNotFoundError, host: ArgumentsHost): void {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse<Response>();\n const request = ctx.getRequest<Request>();\n\n response.status(HttpStatus.NOT_FOUND).json({\n statusCode: HttpStatus.NOT_FOUND,\n timestamp: new Date().toISOString(),\n error: exception.code,\n message: exception.message,\n path: request.url,\n });\n }\n\n}\n```\n\n### Step 3: Register the filter globally\n\n```typescript\napp.useGlobalFilters(\n new RepositoryExceptionFilter(),\n new UserNotFoundExceptionFilter(),\n);\n```\n\n### Step 4: Throw from a service\n\n```typescript\n@Injectable()\nexport class UserService {\n\n public async findById(id: string): Promise<IUserEntity> {\n const user = await this._userRepository.execute(findUserByIdQuery(id));\n\n if (!user) {\n throw new UserNotFoundError(id);\n }\n\n return user;\n }\n\n}\n```\n\n## Response Envelope Convention\n\nAll error responses follow the same shape:\n\n```json\n{\n \"statusCode\": 404,\n \"timestamp\": \"2026-04-05T12:00:00.000Z\",\n \"error\": \"USER_NOT_FOUND\",\n \"message\": \"User not found: abc-123\",\n \"path\": \"/api/v1/users/abc-123\"\n}\n```\n\n## Prisma Error Code Reference\n\nCommon Prisma error codes wrapped by `RepositoryError`:\n\n| Code | Meaning |\n|------|---------|\n| P2000 | Value too long |\n| P2002 | Unique constraint violation |\n| P2003 | Foreign key constraint violation |\n| P2025 | Record not found |\n\n## Rules\n\n1. **Services throw domain errors** \u2014 never raw NestJS HttpException in service layer.\n2. **Exception filters map to HTTP** \u2014 one filter per domain error type.\n3. **Error classes include a machine-readable `code`** \u2014 used for client-side error handling.\n4. **Use `Object.setPrototypeOf`** and `Error.captureStackTrace` in custom Error subclasses.\n5. **Don't leak internal details** \u2014 the filter should not expose Prisma error codes or stack traces.\n6. **Register filters globally** in the bootstrap function or via `APP_FILTER` provider.\n";
|