@breadstone/archipel-mcp 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/guides/ai-text-generation.md +361 -0
- package/data/guides/analytics-and-error-tracking.md +189 -0
- package/data/guides/authentication-and-authorization.md +657 -0
- package/data/guides/blob-storage.md +242 -0
- package/data/guides/caching.md +255 -0
- package/data/guides/cryptography-and-otp.md +240 -0
- package/data/guides/document-generation.md +174 -0
- package/data/guides/email-delivery.md +196 -0
- package/data/guides/esigning-integration.md +231 -0
- package/data/guides/getting-started.md +351 -0
- package/data/guides/implementing-ports.md +317 -0
- package/data/guides/index.md +61 -0
- package/data/guides/mcp-server.md +222 -0
- package/data/guides/openapi-and-feature-discovery.md +266 -0
- package/data/guides/payments-and-feature-gating.md +244 -0
- package/data/guides/resource-management.md +352 -0
- package/data/guides/telemetry-and-observability.md +190 -0
- package/data/guides/testing.md +319 -0
- package/data/guides/tsdoc-guidelines.md +45 -0
- package/data/packages/platform-analytics/api/Class.AnalyticsClientPort.md +19 -20
- package/data/packages/platform-analytics/api/Class.AnalyticsModule.md +2 -3
- package/data/packages/platform-analytics/api/Class.AppInsightsAnalyticsClient.md +21 -22
- package/data/packages/platform-analytics/api/Class.DatadogAnalyticsClient.md +21 -22
- package/data/packages/platform-analytics/api/Class.NoopAnalyticsClient.md +19 -20
- package/data/packages/platform-analytics/api/Class.SentryAnalyticsClient.md +21 -22
- package/data/packages/platform-analytics/api/Interface.IAnalyticsBreadcrumb.md +3 -4
- package/data/packages/platform-analytics/api/Interface.IAnalyticsModuleOptions.md +2 -3
- package/data/packages/platform-analytics/api/Interface.IAnalyticsUser.md +3 -4
- package/data/packages/platform-analytics/api/TypeAlias.AnalyticsLevel.md +1 -2
- package/data/packages/platform-analytics/api/Variable.APPINSIGHTS_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-analytics/api/Variable.APPLICATIONINSIGHTS_CONNECTION_STRING.md +1 -2
- package/data/packages/platform-analytics/api/Variable.DATADOG_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-analytics/api/Variable.DD_ENV.md +1 -2
- package/data/packages/platform-analytics/api/Variable.DD_SERVICE.md +1 -2
- package/data/packages/platform-analytics/api/Variable.SENTRY_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-analytics/api/Variable.SENTRY_DSN.md +1 -2
- package/data/packages/platform-analytics/api/Variable.SENTRY_ENVIRONMENT.md +1 -2
- package/data/packages/platform-analytics/api/index.md +25 -26
- package/data/packages/platform-authentication/api/Class.AnonymousAuthGuard.md +4 -5
- package/data/packages/platform-authentication/api/Class.AppleConnector.md +19 -20
- package/data/packages/platform-authentication/api/Class.AuthModule.md +8 -9
- package/data/packages/platform-authentication/api/Class.AuthSubjectPort.md +10 -11
- package/data/packages/platform-authentication/api/Class.AuthTokenService.md +5 -6
- package/data/packages/platform-authentication/api/Class.ChallengeService.md +26 -27
- package/data/packages/platform-authentication/api/Class.GithubAuthGuard.md +4 -5
- package/data/packages/platform-authentication/api/Class.GithubConnector.md +14 -15
- package/data/packages/platform-authentication/api/Class.GoogleConnector.md +14 -15
- package/data/packages/platform-authentication/api/Class.JwtAuthGuard.md +4 -5
- package/data/packages/platform-authentication/api/Class.JwtPayloadBase.md +15 -16
- package/data/packages/platform-authentication/api/Class.LastActiveMiddleware.md +10 -11
- package/data/packages/platform-authentication/api/Class.LocalAuthGuard.md +4 -5
- package/data/packages/platform-authentication/api/Class.MfaService.md +54 -55
- package/data/packages/platform-authentication/api/Class.MfaSubjectPort.md +8 -9
- package/data/packages/platform-authentication/api/Class.MicrosoftConnector.md +17 -18
- package/data/packages/platform-authentication/api/Class.RolesGuard.md +5 -6
- package/data/packages/platform-authentication/api/Class.SessionMappingProfile.md +4 -5
- package/data/packages/platform-authentication/api/Class.SessionPersistencePort.md +25 -26
- package/data/packages/platform-authentication/api/Class.SessionResponse.md +12 -13
- package/data/packages/platform-authentication/api/Class.SessionService.md +33 -34
- package/data/packages/platform-authentication/api/Class.SocialAuthGuard.md +5 -6
- package/data/packages/platform-authentication/api/Class.SocialAuthPort.md +2 -3
- package/data/packages/platform-authentication/api/Class.TokenEnricherPort.md +2 -3
- package/data/packages/platform-authentication/api/Class.TotpMfaChannel.md +27 -28
- package/data/packages/platform-authentication/api/Class.VerificationService.md +29 -30
- package/data/packages/platform-authentication/api/Class.VerificationSubjectPort.md +16 -17
- package/data/packages/platform-authentication/api/Function.Token.md +0 -1
- package/data/packages/platform-authentication/api/Function.UseRoles.md +2 -3
- package/data/packages/platform-authentication/api/Function.socialAuthGuardFactory.md +2 -3
- package/data/packages/platform-authentication/api/Interface.IAuthModuleOptions.md +20 -21
- package/data/packages/platform-authentication/api/Interface.IAuthSubject.md +7 -8
- package/data/packages/platform-authentication/api/Interface.IMfaChallengePayload.md +5 -6
- package/data/packages/platform-authentication/api/Interface.IMfaChallengeState.md +10 -11
- package/data/packages/platform-authentication/api/Interface.IMfaConfirmation.md +0 -1
- package/data/packages/platform-authentication/api/Interface.IMfaSetup.md +3 -4
- package/data/packages/platform-authentication/api/Interface.IMfaSubject.md +9 -10
- package/data/packages/platform-authentication/api/Interface.IMfaSubjectUpdate.md +7 -8
- package/data/packages/platform-authentication/api/Interface.ISessionRecord.md +14 -15
- package/data/packages/platform-authentication/api/Interface.ISignInResult.md +5 -6
- package/data/packages/platform-authentication/api/Interface.ISocialProfile.md +3 -4
- package/data/packages/platform-authentication/api/Interface.IStoreSessionArgs.md +5 -6
- package/data/packages/platform-authentication/api/Interface.IVerifiableSubject.md +4 -5
- package/data/packages/platform-authentication/api/Variable.APPLE_AUTH_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_CALLBACK_URL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_CLIENT_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_KEY_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_PRIVATE_KEY.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_SCOPE.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_APPLE_TEAM_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GITHUB_CALLBACK_URL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GITHUB_CLIENT_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GITHUB_CLIENT_SECRET.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GITHUB_SCOPE.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GOOGLE_CALLBACK_URL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GOOGLE_CLIENT_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GOOGLE_CLIENT_SECRET.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_GOOGLE_SCOPE.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_JWT_EXPIRES_IN.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_JWT_SECRET.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_CHALLENGE_EXPIRES_IN.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_EMAIL_CODE_TTL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_EMAIL_MIN_RESEND.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_ENCRYPTION_KEY.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_ISSUER.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_MAX_ATTEMPTS.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_PUSH_CODE_TTL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_PUSH_MIN_RESEND.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_SMS_CODE_TTL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MFA_SMS_MIN_RESEND.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MICROSOFT_CALLBACK_URL.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MICROSOFT_CLIENT_ID.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MICROSOFT_CLIENT_SECRET.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MICROSOFT_SCOPE.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_MICROSOFT_TENANT.md +2 -3
- package/data/packages/platform-authentication/api/Variable.AUTH_VERIFY_JWT_EXPIRES_IN.md +2 -3
- package/data/packages/platform-authentication/api/Variable.GITHUB_AUTH_CONFIG_ENTRIES.md +3 -4
- package/data/packages/platform-authentication/api/Variable.GOOGLE_AUTH_CONFIG_ENTRIES.md +3 -4
- package/data/packages/platform-authentication/api/Variable.MICROSOFT_AUTH_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-authentication/api/Variable.PLATFORM_AUTHENTICATION_CONFIG_ENTRIES.md +3 -4
- package/data/packages/platform-authentication/api/Variable.ROLES_KEY.md +2 -3
- package/data/packages/platform-authentication/api/Variable.SEED_ANONYMOUS_USERNAME.md +2 -3
- package/data/packages/platform-authentication/api/Variable.SESSION_LIST_MAPPING_KEY.md +1 -2
- package/data/packages/platform-authentication/api/Variable.SESSION_MAPPING_KEY.md +1 -2
- package/data/packages/platform-authentication/api/Variable.TOTP_MFA_PROVIDERS.md +1 -2
- package/data/packages/platform-authentication/api/Variable.User.md +2 -3
- package/data/packages/platform-authentication/api/index.md +94 -95
- package/data/packages/platform-blob-storage/api/Class.AwsS3BlobProvider.md +16 -17
- package/data/packages/platform-blob-storage/api/Class.AzureBlobProvider.md +16 -17
- package/data/packages/platform-blob-storage/api/Class.BlobHealthIndicator.md +5 -6
- package/data/packages/platform-blob-storage/api/Class.BlobModule.md +2 -3
- package/data/packages/platform-blob-storage/api/Class.BlobObjectPersistencePort.md +12 -13
- package/data/packages/platform-blob-storage/api/Class.BlobService.md +45 -46
- package/data/packages/platform-blob-storage/api/Class.BlobVariantPersistencePort.md +7 -8
- package/data/packages/platform-blob-storage/api/Class.VercelBlobProvider.md +18 -19
- package/data/packages/platform-blob-storage/api/Interface.IAwsS3BlobProviderRegistration.md +2 -3
- package/data/packages/platform-blob-storage/api/Interface.IAwsS3ProviderOptions.md +5 -6
- package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderOptions.md +2 -3
- package/data/packages/platform-blob-storage/api/Interface.IAzureBlobProviderRegistration.md +2 -3
- package/data/packages/platform-blob-storage/api/Interface.IBlobDeleteRequest.md +2 -3
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadRequest.md +3 -4
- package/data/packages/platform-blob-storage/api/Interface.IBlobDownloadResult.md +6 -7
- package/data/packages/platform-blob-storage/api/Interface.IBlobModuleOptions.md +3 -4
- package/data/packages/platform-blob-storage/api/Interface.IBlobObjectMetadata.md +12 -13
- package/data/packages/platform-blob-storage/api/Interface.IBlobProvider.md +14 -15
- package/data/packages/platform-blob-storage/api/Interface.IBlobSignedUrlRequest.md +3 -4
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadRequest.md +8 -9
- package/data/packages/platform-blob-storage/api/Interface.IBlobUploadResult.md +1 -2
- package/data/packages/platform-blob-storage/api/Interface.ICustomBlobProviderRegistration.md +2 -3
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderOptions.md +5 -6
- package/data/packages/platform-blob-storage/api/Interface.IVercelBlobProviderRegistration.md +2 -3
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobDownloadResponseType.md +1 -2
- package/data/packages/platform-blob-storage/api/TypeAlias.BlobUploadBody.md +0 -1
- package/data/packages/platform-blob-storage/api/TypeAlias.IBlobProviderRegistration.md +1 -2
- package/data/packages/platform-blob-storage/api/Variable.AWS_S3_PROVIDER_OPTIONS.md +1 -2
- package/data/packages/platform-blob-storage/api/Variable.AZURE_BLOB_PROVIDER_OPTIONS.md +1 -2
- package/data/packages/platform-blob-storage/api/Variable.BLOB_PROVIDER.md +1 -2
- package/data/packages/platform-blob-storage/api/Variable.BlobDownloadResponseTypes.md +9 -10
- package/data/packages/platform-blob-storage/api/Variable.BlobProviderKinds.md +10 -11
- package/data/packages/platform-blob-storage/api/Variable.VERCEL_BLOB_PROVIDER_OPTIONS.md +1 -2
- package/data/packages/platform-blob-storage/api/index.md +41 -42
- package/data/packages/platform-caching/api/Class.MemoryLayeredCache.md +37 -38
- package/data/packages/platform-caching/api/Class.NoopCacheMetricsRecorder.md +19 -20
- package/data/packages/platform-caching/api/Class.RedisLayeredCache.md +39 -40
- package/data/packages/platform-caching/api/Interface.ICacheMetricsRecorder.md +19 -20
- package/data/packages/platform-caching/api/Interface.ICacheStats.md +4 -5
- package/data/packages/platform-caching/api/Interface.ILayeredCache.md +34 -35
- package/data/packages/platform-caching/api/Interface.ILayeredCacheOptions.md +4 -5
- package/data/packages/platform-caching/api/Interface.IRedisLayeredCacheOptions.md +15 -16
- package/data/packages/platform-caching/api/index.md +12 -13
- package/data/packages/platform-core/api/Class.AppHealthIndicator.md +4 -5
- package/data/packages/platform-core/api/Class.BlobResourceStrategy.md +20 -21
- package/data/packages/platform-core/api/Class.BooleanUtils.md +12 -13
- package/data/packages/platform-core/api/Class.CUIDGenerator.md +17 -18
- package/data/packages/platform-core/api/Class.CasingInterceptor.md +10 -11
- package/data/packages/platform-core/api/Class.CatchUtils.md +15 -16
- package/data/packages/platform-core/api/Class.ConfigKeyNotFoundError.md +89 -0
- package/data/packages/platform-core/api/Class.ConfigModule.md +7 -8
- package/data/packages/platform-core/api/Class.ConfigRegistry.md +8 -9
- package/data/packages/platform-core/api/Class.ConfigService.md +30 -32
- package/data/packages/platform-core/api/Class.ConfigStrategyBase.md +17 -18
- package/data/packages/platform-core/api/Class.ContentTemplateEngine.md +4 -5
- package/data/packages/platform-core/api/Class.DateTimeUtils.md +12 -13
- package/data/packages/platform-core/api/Class.DeviceParserService.md +2 -3
- package/data/packages/platform-core/api/Class.EmbeddedResourceStrategy.md +22 -23
- package/data/packages/platform-core/api/Class.EnvironmentConfigStrategy.md +19 -20
- package/data/packages/platform-core/api/Class.ErrorTemplateService.md +18 -19
- package/data/packages/platform-core/api/Class.EventHub.md +25 -26
- package/data/packages/platform-core/api/Class.EventModule.md +0 -1
- package/data/packages/platform-core/api/Class.FileConfigStrategy.md +21 -22
- package/data/packages/platform-core/api/Class.FileResourceStrategy.md +19 -20
- package/data/packages/platform-core/api/Class.GUIDGenerator.md +7 -8
- package/data/packages/platform-core/api/Class.GlobalExceptionFilter.md +7 -8
- package/data/packages/platform-core/api/Class.HealthModule.md +2 -3
- package/data/packages/platform-core/api/Class.HealthOrchestrator.md +3 -4
- package/data/packages/platform-core/api/Class.HostModule.md +0 -2
- package/data/packages/platform-core/api/Class.HostService.md +21 -22
- package/data/packages/platform-core/api/Class.HttpLoggerMiddleware.md +8 -9
- package/data/packages/platform-core/api/Class.IdGeneratorBase.md +7 -8
- package/data/packages/platform-core/api/Class.IdentifierModule.md +3 -4
- package/data/packages/platform-core/api/Class.LimitRequestSizeMiddleware.md +8 -9
- package/data/packages/platform-core/api/Class.LocalizedTextRequest.md +1 -2
- package/data/packages/platform-core/api/Class.LocalizedTextResponse.md +1 -2
- package/data/packages/platform-core/api/Class.MappingBuilder.md +18 -19
- package/data/packages/platform-core/api/Class.MappingModule.md +2 -3
- package/data/packages/platform-core/api/Class.MappingNotRegisteredError.md +5 -6
- package/data/packages/platform-core/api/Class.MappingProfileBase.md +2 -3
- package/data/packages/platform-core/api/Class.MappingService.md +52 -53
- package/data/packages/platform-core/api/Class.NormalizedUtils.md +20 -21
- package/data/packages/platform-core/api/Class.PageableRequest.md +1 -2
- package/data/packages/platform-core/api/Class.PageableResponse.md +3 -4
- package/data/packages/platform-core/api/Class.ProblemDetailException.md +6 -7
- package/data/packages/platform-core/api/Class.ProblemDetailExceptionFilter.md +11 -12
- package/data/packages/platform-core/api/Class.QuantityResponse.md +1 -2
- package/data/packages/platform-core/api/Class.ResourceManager.md +88 -89
- package/data/packages/platform-core/api/Class.ResourceModule.md +3 -4
- package/data/packages/platform-core/api/Class.ResponseReturn.md +102 -104
- package/data/packages/platform-core/api/Class.SseHub.md +23 -24
- package/data/packages/platform-core/api/Class.SseModule.md +3 -4
- package/data/packages/platform-core/api/Class.TimeStampResponse.md +1 -2
- package/data/packages/platform-core/api/Class.TypeMappingNotRegisteredError.md +5 -6
- package/data/packages/platform-core/api/Class.UUIDGenerator.md +7 -8
- package/data/packages/platform-core/api/Class.UserAvatarGeneratorService.md +4 -5
- package/data/packages/platform-core/api/Class.UserNameGeneratorService.md +4 -5
- package/data/packages/platform-core/api/Function.Public.md +0 -1
- package/data/packages/platform-core/api/Function.createConfigKey.md +7 -9
- package/data/packages/platform-core/api/Function.createEventKey.md +6 -7
- package/data/packages/platform-core/api/Function.createMappingKey.md +6 -7
- package/data/packages/platform-core/api/Function.env.md +4 -5
- package/data/packages/platform-core/api/Function.getMimeTypeByFileNameOrExtension.md +2 -3
- package/data/packages/platform-core/api/ISseEventData.Function.isActionId.md +4 -5
- package/data/packages/platform-core/api/Interface.IBlobResourceStrategyConfig.md +1 -2
- package/data/packages/platform-core/api/Interface.IBlobServiceAdapter.md +5 -6
- package/data/packages/platform-core/api/Interface.IConfigKey.md +16 -17
- package/data/packages/platform-core/api/Interface.IConfigModuleOptions.md +3 -4
- package/data/packages/platform-core/api/Interface.IConfigRegistryEntry.md +6 -7
- package/data/packages/platform-core/api/Interface.IDeviceInfo.md +6 -7
- package/data/packages/platform-core/api/Interface.IErrorPageParams.md +19 -20
- package/data/packages/platform-core/api/Interface.IEventKey.md +7 -8
- package/data/packages/platform-core/api/Interface.IEventMap.md +0 -1
- package/data/packages/platform-core/api/Interface.IFileResourceStrategyConfig.md +5 -6
- package/data/packages/platform-core/api/Interface.IHealthCheckResult.md +3 -4
- package/data/packages/platform-core/api/Interface.IHealthIndicator.md +3 -4
- package/data/packages/platform-core/api/Interface.IHostContentParams.md +17 -18
- package/data/packages/platform-core/api/Interface.IIdGenerator.md +7 -8
- package/data/packages/platform-core/api/Interface.IMappingBuilder.md +17 -18
- package/data/packages/platform-core/api/Interface.IMappingKey.md +7 -8
- package/data/packages/platform-core/api/Interface.IMappingProfile.md +2 -3
- package/data/packages/platform-core/api/Interface.IResourceManagerConfig.md +4 -5
- package/data/packages/platform-core/api/Interface.IResourceMetadata.md +6 -7
- package/data/packages/platform-core/api/Interface.IResourceResult.md +1 -2
- package/data/packages/platform-core/api/Interface.IResourceStrategy.md +16 -17
- package/data/packages/platform-core/api/Interface.ISseEventData.md +3 -4
- package/data/packages/platform-core/api/Interface.ISseHub.md +16 -17
- package/data/packages/platform-core/api/Namespace.ISseEventData.md +2 -3
- package/data/packages/platform-core/api/TypeAlias.CamelCase.md +2 -3
- package/data/packages/platform-core/api/TypeAlias.ProblemDetail.md +5 -6
- package/data/packages/platform-core/api/TypeAlias.ProblemDetailTypeUrlResolver.md +4 -5
- package/data/packages/platform-core/api/TypeAlias.SetOptional.md +4 -5
- package/data/packages/platform-core/api/TypeAlias.StringValue.md +4 -2
- package/data/packages/platform-core/api/Variable.APP_NAME.md +1 -2
- package/data/packages/platform-core/api/Variable.APP_PORT.md +1 -2
- package/data/packages/platform-core/api/Variable.APP_URL.md +1 -2
- package/data/packages/platform-core/api/Variable.APP_VERSION.md +1 -2
- package/data/packages/platform-core/api/Variable.GIT_COMMIT.md +1 -2
- package/data/packages/platform-core/api/Variable.HEALTH_INDICATORS_TOKEN.md +1 -2
- package/data/packages/platform-core/api/Variable.ID_GENERATOR_TOKEN.md +1 -2
- package/data/packages/platform-core/api/Variable.INTELLIGENCE_MAX_OUTPUT_TOKENS.md +1 -2
- package/data/packages/platform-core/api/Variable.INTELLIGENCE_MODEL.md +1 -2
- package/data/packages/platform-core/api/Variable.INTELLIGENCE_TEMPERATURE.md +1 -2
- package/data/packages/platform-core/api/Variable.INTELLIGENCE_TOP_P.md +1 -2
- package/data/packages/platform-core/api/Variable.IS_PUBLIC_KEY.md +2 -3
- package/data/packages/platform-core/api/Variable.IpAddress.md +6 -7
- package/data/packages/platform-core/api/Variable.Lang.md +5 -6
- package/data/packages/platform-core/api/Variable.NODE_ENV.md +1 -2
- package/data/packages/platform-core/api/Variable.PLATFORM_CORE_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-core/api/Variable.UserAgent.md +2 -3
- package/data/packages/platform-core/api/index.md +116 -116
- package/data/packages/platform-cryptography/api/Class.BcryptService.md +7 -8
- package/data/packages/platform-cryptography/api/Class.CryptoService.md +3 -4
- package/data/packages/platform-cryptography/api/Class.OtpService.md +8 -9
- package/data/packages/platform-cryptography/api/Interface.IOtpService.md +8 -9
- package/data/packages/platform-cryptography/api/Interface.IOtpUriOptions.md +2 -3
- package/data/packages/platform-cryptography/api/Variable.OTP_SERVICE_TOKEN.md +1 -2
- package/data/packages/platform-cryptography/api/Variable.TOTP_EPOCH_TOLERANCE.md +7 -8
- package/data/packages/platform-cryptography/api/index.md +11 -12
- package/data/packages/platform-database/api/Class.DatabaseHealthIndicator.md +6 -7
- package/data/packages/platform-database/api/Class.DatabaseModule.md +5 -6
- package/data/packages/platform-database/api/Class.DatabaseService.md +19 -20
- package/data/packages/platform-database/api/Class.PrismaService.md +7 -8
- package/data/packages/platform-database/api/Class.RepositoryBase.md +126 -127
- package/data/packages/platform-database/api/Class.RepositoryExceptionFilter.md +5 -6
- package/data/packages/platform-database/api/Function.pageable.md +13 -10
- package/data/packages/platform-database/api/Function.paginator.md +2 -3
- package/data/packages/platform-database/api/Function.query.md +7 -8
- package/data/packages/platform-database/api/Function.skip.md +5 -6
- package/data/packages/platform-database/api/Function.transactionalQuery.md +6 -7
- package/data/packages/platform-database/api/Interface.IDatabaseModuleConfig.md +0 -1
- package/data/packages/platform-database/api/Interface.IPaginateOptions.md +1 -2
- package/data/packages/platform-database/api/Interface.IPaginatedResult.md +4 -5
- package/data/packages/platform-database/api/Interface.IRepositoryQuery.md +7 -8
- package/data/packages/platform-database/api/Interface.ITransactionalRepositoryQuery.md +5 -6
- package/data/packages/platform-database/api/TypeAlias.DelegateArgs.md +2 -3
- package/data/packages/platform-database/api/TypeAlias.DelegateReturnTypes.md +2 -3
- package/data/packages/platform-database/api/TypeAlias.PaginateFunction.md +7 -8
- package/data/packages/platform-database/api/TypeAlias.QueryResultType.md +3 -4
- package/data/packages/platform-database/api/TypeAlias.TransactionalQueryResultType.md +3 -4
- package/data/packages/platform-database/api/index.md +27 -28
- package/data/packages/platform-documents/api/Class.BaseDocumentRenderer.md +31 -33
- package/data/packages/platform-documents/api/Class.DocumentEngine.md +7 -8
- package/data/packages/platform-documents/api/Class.DocumentModule.md +2 -3
- package/data/packages/platform-documents/api/Class.SharpImageProcessor.md +21 -22
- package/data/packages/platform-documents/api/Interface.IDocumentModuleOptions.md +5 -7
- package/data/packages/platform-documents/api/Interface.IDocumentPlaceholderDetail.md +5 -6
- package/data/packages/platform-documents/api/Interface.IDocumentProbeReport.md +8 -9
- package/data/packages/platform-documents/api/Interface.IDocumentRenderer.md +2 -3
- package/data/packages/platform-documents/api/Interface.IImagePayload.md +3 -4
- package/data/packages/platform-documents/api/Interface.IImageProcessor.md +18 -19
- package/data/packages/platform-documents/api/Interface.IRenderOptions.md +3 -4
- package/data/packages/platform-documents/api/Interface.IRenderResult.md +3 -4
- package/data/packages/platform-documents/api/TypeAlias.DocumentFormat.md +1 -2
- package/data/packages/platform-documents/api/TypeAlias.EngineType.md +1 -2
- package/data/packages/platform-documents/api/TypeAlias.ImageMimeType.md +1 -2
- package/data/packages/platform-documents/api/TypeAlias.TemplateFormat.md +1 -2
- package/data/packages/platform-documents/api/TypeAlias.TemplateType.md +1 -2
- package/data/packages/platform-documents/api/Variable.DOCUMENT_MODULE_OPTIONS.md +1 -2
- package/data/packages/platform-documents/api/Variable.DOCUMENT_PARSER_TOKEN.md +1 -2
- package/data/packages/platform-documents/api/Variable.DOCUMENT_RENDERER_TOKEN.md +1 -2
- package/data/packages/platform-documents/api/Variable.IMAGE_PROCESSOR_TOKEN.md +1 -2
- package/data/packages/platform-documents/api/index.md +28 -29
- package/data/packages/platform-esigning/api/Class.EsigningClientPort.md +20 -21
- package/data/packages/platform-esigning/api/Class.EsigningError.md +4 -5
- package/data/packages/platform-esigning/api/Class.EsigningModule.md +2 -3
- package/data/packages/platform-esigning/api/Class.EsigningPersistencePort.md +9 -10
- package/data/packages/platform-esigning/api/Class.EsigningService.md +24 -25
- package/data/packages/platform-esigning/api/Class.InternalEsigningProvider.md +24 -25
- package/data/packages/platform-esigning/api/Class.SigningProviderError.md +9 -10
- package/data/packages/platform-esigning/api/Class.SigningRequestNotFoundError.md +3 -4
- package/data/packages/platform-esigning/api/Class.WebhookVerificationError.md +2 -3
- package/data/packages/platform-esigning/api/Interface.ICreateSigningRequest.md +6 -7
- package/data/packages/platform-esigning/api/Interface.ICreateSigningRequestDocument.md +3 -4
- package/data/packages/platform-esigning/api/Interface.ICreateSigningRequestSigner.md +3 -4
- package/data/packages/platform-esigning/api/Interface.ICreateSigningSessionRequest.md +2 -3
- package/data/packages/platform-esigning/api/Interface.IEsigningModuleOptions.md +3 -4
- package/data/packages/platform-esigning/api/Interface.IEsigningWebhookEvent.md +5 -6
- package/data/packages/platform-esigning/api/Interface.ISignedDocument.md +5 -6
- package/data/packages/platform-esigning/api/Interface.ISigner.md +5 -6
- package/data/packages/platform-esigning/api/Interface.ISigningDocument.md +5 -6
- package/data/packages/platform-esigning/api/Interface.ISigningField.md +10 -11
- package/data/packages/platform-esigning/api/Interface.ISigningRequest.md +10 -11
- package/data/packages/platform-esigning/api/Interface.ISigningSession.md +4 -5
- package/data/packages/platform-esigning/api/TypeAlias.SignerRole.md +1 -2
- package/data/packages/platform-esigning/api/TypeAlias.SignerStatus.md +1 -2
- package/data/packages/platform-esigning/api/TypeAlias.SigningFieldType.md +1 -2
- package/data/packages/platform-esigning/api/TypeAlias.SigningRequestStatus.md +1 -2
- package/data/packages/platform-esigning/api/TypeAlias.WebhookEventType.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ADOBE_SIGN_BASE_URL.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ADOBE_SIGN_CLIENT_SECRET.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ADOBE_SIGN_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-esigning/api/Variable.ADOBE_SIGN_INTEGRATION_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ADOBE_SIGN_WEBHOOK_CLIENT_ID.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_ACCOUNT_ID.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_BASE_URL.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_INTEGRATION_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_SECRET_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DOCUSIGN_WEBHOOK_HMAC_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DROPBOX_SIGN_API_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DROPBOX_SIGN_CLIENT_ID.md +1 -2
- package/data/packages/platform-esigning/api/Variable.DROPBOX_SIGN_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-esigning/api/Variable.DROPBOX_SIGN_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ESIGNING_API_BASE_URL.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ESIGNING_API_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ESIGNING_PROVIDER.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ESIGNING_PROVIDER_OPTIONS.md +1 -2
- package/data/packages/platform-esigning/api/Variable.ESIGNING_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-esigning/api/Variable.PLATFORM_ESIGNING_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_API_KEY.md +1 -2
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_BASE_URL.md +1 -2
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_CLIENT_ID.md +1 -2
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_CLIENT_SECRET.md +1 -2
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-esigning/api/Variable.SIGNNOW_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-esigning/api/Variable.SignerRoles.md +12 -13
- package/data/packages/platform-esigning/api/Variable.SignerStatuses.md +14 -15
- package/data/packages/platform-esigning/api/Variable.SigningFieldTypes.md +20 -21
- package/data/packages/platform-esigning/api/Variable.SigningRequestStatuses.md +18 -19
- package/data/packages/platform-esigning/api/Variable.WebhookEventTypes.md +20 -21
- package/data/packages/platform-esigning/api/index.md +65 -66
- package/data/packages/platform-intelligence/api/Class.IntelligenceCapabilityRegistrarBase.md +4 -5
- package/data/packages/platform-intelligence/api/Class.IntelligenceCapabilityRegistry.md +10 -11
- package/data/packages/platform-intelligence/api/Class.IntelligenceModule.md +0 -1
- package/data/packages/platform-intelligence/api/Class.IntelligenceTextGenerator.md +10 -11
- package/data/packages/platform-intelligence/api/Function.createProviderOptions.md +2 -3
- package/data/packages/platform-intelligence/api/Function.loadAnthropicLanguageModel.md +2 -3
- package/data/packages/platform-intelligence/api/Function.loadGoogleLanguageModel.md +2 -3
- package/data/packages/platform-intelligence/api/Function.loadGrokLanguageModel.md +2 -3
- package/data/packages/platform-intelligence/api/Function.loadOpenAILanguageModel.md +2 -3
- package/data/packages/platform-intelligence/api/Function.loadProviderFactory.md +3 -4
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceArtifact.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCapability.md +6 -7
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCapabilityMetadata.md +4 -5
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCapabilityPayload.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCapabilityRegistry.md +10 -11
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCapabilityResult.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceCompletionUsage.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceContext.md +5 -6
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceContextBuilder.md +3 -4
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceConversationMessageSnapshot.md +4 -5
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceConversationSnapshot.md +3 -4
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceFollowUpQuestion.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceIntent.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceIntentEntity.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceMessageModel.md +4 -5
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceMessagePayload.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligencePrompt.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligencePromptMessage.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceProviderConfiguration.md +6 -7
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceResponseMessage.md +1 -2
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceTextCompletion.md +4 -5
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceTextGenerationOptions.md +2 -3
- package/data/packages/platform-intelligence/api/Interface.IIntelligenceTextGenerator.md +4 -5
- package/data/packages/platform-intelligence/api/TypeAlias.IntelligenceConversationMessageRole.md +1 -3
- package/data/packages/platform-intelligence/api/TypeAlias.IntelligenceLanguageModelLoader.md +2 -3
- package/data/packages/platform-intelligence/api/TypeAlias.IntelligenceProviderName.md +1 -2
- package/data/packages/platform-intelligence/api/Variable.IntelligenceConversationMessageRoles.md +7 -8
- package/data/packages/platform-intelligence/api/Variable.IntelligenceProviderNames.md +10 -11
- package/data/packages/platform-intelligence/api/index.md +46 -47
- package/data/packages/platform-logging/api/Class.LoggerModule.md +0 -1
- package/data/packages/platform-logging/api/Variable.APP_LOG_LEVEL.md +1 -2
- package/data/packages/platform-logging/api/Variable.PLATFORM_LOGGING_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-logging/api/index.md +7 -8
- package/data/packages/platform-mailing/api/Class.BlobTemplateFetchStrategy.md +2 -3
- package/data/packages/platform-mailing/api/Class.DeliveryStrategyBase.md +11 -12
- package/data/packages/platform-mailing/api/Class.FileTemplateFetchStrategy.md +2 -3
- package/data/packages/platform-mailing/api/Class.LogDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.MailHealthIndicator.md +4 -5
- package/data/packages/platform-mailing/api/Class.MailModule.md +0 -1
- package/data/packages/platform-mailing/api/Class.MailService.md +27 -28
- package/data/packages/platform-mailing/api/Class.MailTemplateEngine.md +12 -13
- package/data/packages/platform-mailing/api/Class.MailVerificationService.md +14 -15
- package/data/packages/platform-mailing/api/Class.MailgunDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.PostmarkDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.ResendDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.SendGridDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.SmtpDeliveryStrategy.md +13 -14
- package/data/packages/platform-mailing/api/Class.TemplateFetchStrategyBase.md +2 -3
- package/data/packages/platform-mailing/api/Interface.IMailEvents.md +0 -1
- package/data/packages/platform-mailing/api/Interface.IMailTemplateVariants.md +1 -2
- package/data/packages/platform-mailing/api/TypeAlias.MailTemplateFormat.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAILGUN_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAILGUN_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-mailing/api/Variable.MAILGUN_DOMAIN.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY_TOKEN.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_HOST.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_DOMAIN.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_PORT.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_POSTMARK_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_RESEND_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SENDER_EMAIL.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SENDGRID_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_HOST.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PASSWORD.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PORT.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_SECURE.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_USER.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_ENGINE_FORMAT.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_FETCH_STRATEGY_TOKEN.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_STRATEGY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.MAIL_USER.md +1 -2
- package/data/packages/platform-mailing/api/Variable.PLATFORM_MAILING_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-mailing/api/Variable.POSTMARK_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.POSTMARK_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-mailing/api/Variable.RESEND_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.RESEND_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-mailing/api/Variable.SENDGRID_API_KEY.md +1 -2
- package/data/packages/platform-mailing/api/Variable.SENDGRID_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-mailing/api/Variable.SEND_MAIL_EVENT_KEY.md +2 -3
- package/data/packages/platform-mailing/api/index.md +54 -55
- package/data/packages/platform-mcp/api/Class.McpDiscoveryService.md +8 -9
- package/data/packages/platform-mcp/api/Class.McpModule.md +8 -9
- package/data/packages/platform-mcp/api/Class.McpRegistryService.md +16 -17
- package/data/packages/platform-mcp/api/Class.McpServerService.md +19 -20
- package/data/packages/platform-mcp/api/Function.McpPrompt.md +2 -3
- package/data/packages/platform-mcp/api/Function.McpResource.md +2 -3
- package/data/packages/platform-mcp/api/Function.McpTool.md +2 -3
- package/data/packages/platform-mcp/api/Interface.IMcpHandlerMetadata.md +2 -3
- package/data/packages/platform-mcp/api/Interface.IMcpModuleAsyncOptions.md +8 -9
- package/data/packages/platform-mcp/api/Interface.IMcpModuleOptions.md +3 -4
- package/data/packages/platform-mcp/api/Interface.IMcpModuleOptionsFactory.md +3 -4
- package/data/packages/platform-mcp/api/Interface.IMcpPromptMetadata.md +3 -4
- package/data/packages/platform-mcp/api/Interface.IMcpResourceMetadata.md +4 -5
- package/data/packages/platform-mcp/api/Interface.IMcpToolMetadata.md +5 -6
- package/data/packages/platform-mcp/api/Interface.IRegisteredPrompt.md +3 -4
- package/data/packages/platform-mcp/api/Interface.IRegisteredResource.md +3 -4
- package/data/packages/platform-mcp/api/Interface.IRegisteredTool.md +3 -4
- package/data/packages/platform-mcp/api/Interface.ISseTransportOptions.md +0 -1
- package/data/packages/platform-mcp/api/Interface.IStreamableHttpTransportOptions.md +1 -2
- package/data/packages/platform-mcp/api/Variable.MCP_MODULE_OPTIONS.md +1 -2
- package/data/packages/platform-mcp/api/index.md +26 -27
- package/data/packages/platform-openapi/api/Class.SwaggerFeatureDiscovery.md +15 -12
- package/data/packages/platform-openapi/api/Class.SwaggerFeatureRegistry.md +5 -6
- package/data/packages/platform-openapi/api/Class.SwaggerMultiDocumentService.md +20 -21
- package/data/packages/platform-openapi/api/Class.SwaggerTheme.md +2 -3
- package/data/packages/platform-openapi/api/Function.Api.md +13 -14
- package/data/packages/platform-openapi/api/Function.SwaggerFeature.md +4 -5
- package/data/packages/platform-openapi/api/Function.getRegisteredSwaggerFeatures.md +0 -1
- package/data/packages/platform-openapi/api/Function.getSwaggerFeatureMetadata.md +8 -7
- package/data/packages/platform-openapi/api/Interface.IFeatureSwaggerConfig.md +5 -6
- package/data/packages/platform-openapi/api/Interface.ISwaggerFeatureMetadata.md +5 -6
- package/data/packages/platform-openapi/api/Variable.APP_VERSION.md +1 -2
- package/data/packages/platform-openapi/api/Variable.PLATFORM_OPENAPI_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-openapi/api/Variable.SWAGGER_CONTACT_EMAIL.md +1 -2
- package/data/packages/platform-openapi/api/Variable.SWAGGER_CONTACT_NAME.md +1 -2
- package/data/packages/platform-openapi/api/Variable.SWAGGER_CONTACT_URL.md +1 -2
- package/data/packages/platform-openapi/api/Variable.SWAGGER_FEATURE_METADATA_KEY.md +2 -3
- package/data/packages/platform-openapi/api/index.md +24 -25
- package/data/packages/platform-payments/api/Class.FeatureAccessPort.md +7 -8
- package/data/packages/platform-payments/api/Class.FeatureGuard.md +6 -7
- package/data/packages/platform-payments/api/Class.FeatureUsageInterceptor.md +7 -8
- package/data/packages/platform-payments/api/Class.LemonSqueezyClient.md +24 -25
- package/data/packages/platform-payments/api/Class.MollieClient.md +24 -25
- package/data/packages/platform-payments/api/Class.PaddleClient.md +24 -25
- package/data/packages/platform-payments/api/Class.PaymentClientPort.md +25 -26
- package/data/packages/platform-payments/api/Class.PaymentModule.md +2 -3
- package/data/packages/platform-payments/api/Class.StripeClient.md +28 -29
- package/data/packages/platform-payments/api/Function.RequiresFeature.md +2 -3
- package/data/packages/platform-payments/api/Interface.IFeatureAccessResult.md +4 -5
- package/data/packages/platform-payments/api/Interface.INormalizedCheckoutSession.md +5 -6
- package/data/packages/platform-payments/api/Interface.INormalizedPrice.md +6 -7
- package/data/packages/platform-payments/api/Interface.INormalizedSubscription.md +8 -9
- package/data/packages/platform-payments/api/Interface.INormalizedWebhookEvent.md +2 -3
- package/data/packages/platform-payments/api/Interface.IPaymentModuleOptions.md +3 -4
- package/data/packages/platform-payments/api/TypeAlias.SubscriptionStatus.md +9 -10
- package/data/packages/platform-payments/api/Variable.FEATURE_KEY_METADATA.md +2 -3
- package/data/packages/platform-payments/api/Variable.LEMONSQUEEZY_API_KEY.md +1 -2
- package/data/packages/platform-payments/api/Variable.LEMONSQUEEZY_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-payments/api/Variable.LEMONSQUEEZY_STORE_ID.md +1 -2
- package/data/packages/platform-payments/api/Variable.LEMONSQUEEZY_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-payments/api/Variable.MOLLIE_API_KEY.md +1 -2
- package/data/packages/platform-payments/api/Variable.MOLLIE_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-payments/api/Variable.MOLLIE_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-payments/api/Variable.PADDLE_API_KEY.md +1 -2
- package/data/packages/platform-payments/api/Variable.PADDLE_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-payments/api/Variable.PADDLE_ENVIRONMENT.md +1 -2
- package/data/packages/platform-payments/api/Variable.PADDLE_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-payments/api/Variable.STRIPE_API_KEY.md +1 -2
- package/data/packages/platform-payments/api/Variable.STRIPE_CONFIG_ENTRIES.md +2 -3
- package/data/packages/platform-payments/api/Variable.STRIPE_WEBHOOK_SECRET.md +1 -2
- package/data/packages/platform-payments/api/index.md +40 -41
- package/data/packages/platform-reporting/api/Class.ReportingContributorRegistry.md +3 -4
- package/data/packages/platform-reporting/api/Class.ReportingDatasetNotFoundError.md +3 -4
- package/data/packages/platform-reporting/api/Class.ReportingFacade.md +8 -9
- package/data/packages/platform-reporting/api/Class.ReportingModule.md +0 -1
- package/data/packages/platform-reporting/api/Interface.IReportingContributor.md +4 -5
- package/data/packages/platform-reporting/api/Interface.IReportingDataset.md +5 -6
- package/data/packages/platform-reporting/api/Interface.IReportingDatasetField.md +4 -5
- package/data/packages/platform-reporting/api/Interface.IReportingQuery.md +4 -5
- package/data/packages/platform-reporting/api/Interface.IReportingQueryFilter.md +2 -3
- package/data/packages/platform-reporting/api/Interface.IReportingQueryResult.md +4 -5
- package/data/packages/platform-reporting/api/Interface.IReportingQuerySort.md +1 -2
- package/data/packages/platform-reporting/api/TypeAlias.ReportingFieldType.md +1 -2
- package/data/packages/platform-reporting/api/TypeAlias.ReportingFilterOperator.md +1 -2
- package/data/packages/platform-reporting/api/TypeAlias.ReportingQueryResultRow.md +0 -1
- package/data/packages/platform-reporting/api/Variable.ReportingFieldTypes.md +12 -13
- package/data/packages/platform-reporting/api/Variable.ReportingFilterOperators.md +10 -11
- package/data/packages/platform-reporting/api/index.md +23 -24
- package/data/packages/platform-telemetry/api/Class.NoopTelemetryFacade.md +22 -23
- package/data/packages/platform-telemetry/api/Class.TelemetryCacheMetricsRecorder.md +26 -27
- package/data/packages/platform-telemetry/api/Class.TelemetryFacade.md +23 -24
- package/data/packages/platform-telemetry/api/Class.TelemetryLoggerService.md +35 -36
- package/data/packages/platform-telemetry/api/Class.TelemetryModule.md +2 -3
- package/data/packages/platform-telemetry/api/Class.TelemetryRuleEngine.md +4 -5
- package/data/packages/platform-telemetry/api/Interface.ITelemetryFacade.md +22 -23
- package/data/packages/platform-telemetry/api/Interface.ITelemetryMetricsOptions.md +2 -3
- package/data/packages/platform-telemetry/api/Interface.ITelemetryOptions.md +8 -9
- package/data/packages/platform-telemetry/api/Interface.ITelemetryTracesOptions.md +2 -3
- package/data/packages/platform-telemetry/api/Variable.TELEMETRY_ENABLED.md +1 -2
- package/data/packages/platform-telemetry/api/Variable.TELEMETRY_FACADE.md +1 -2
- package/data/packages/platform-telemetry/api/Variable.TELEMETRY_OPTIONS.md +1 -2
- package/data/packages/platform-telemetry/api/Variable.TELEMETRY_SHUTDOWN.md +1 -2
- package/data/packages/platform-telemetry/api/Variable.defaultTelemetryOptions.md +0 -1
- package/data/packages/platform-telemetry/api/index.md +20 -21
- package/package.json +1 -1
- package/src/GuidesLoader.d.ts +13 -0
- package/src/GuidesLoader.js +81 -0
- package/src/main.js +36 -198
- package/src/models/IGuideDoc.d.ts +15 -0
- package/src/models/IGuideDoc.js +3 -0
- package/src/tools/registerGetConfigPatternTool.d.ts +5 -0
- package/src/tools/registerGetConfigPatternTool.js +15 -0
- package/src/tools/registerGetDtoPatternTool.d.ts +5 -0
- package/src/tools/registerGetDtoPatternTool.js +15 -0
- package/src/tools/registerGetErrorHandlingPatternTool.d.ts +5 -0
- package/src/tools/registerGetErrorHandlingPatternTool.js +15 -0
- package/src/tools/registerGetGuardPatternTool.d.ts +5 -0
- package/src/tools/registerGetGuardPatternTool.js +15 -0
- package/src/tools/registerGetGuideTool.d.ts +6 -0
- package/src/tools/registerGetGuideTool.js +32 -0
- package/src/tools/registerGetMappingPatternTool.d.ts +5 -0
- package/src/tools/registerGetMappingPatternTool.js +34 -0
- package/src/tools/registerGetModulePatternTool.d.ts +5 -0
- package/src/tools/registerGetModulePatternTool.js +29 -0
- package/src/tools/registerGetPackageDocTool.d.ts +6 -0
- package/src/tools/registerGetPackageDocTool.js +43 -0
- package/src/tools/registerGetQueryPatternTool.d.ts +5 -0
- package/src/tools/registerGetQueryPatternTool.js +29 -0
- package/src/tools/registerGetRepositoryPatternTool.d.ts +5 -0
- package/src/tools/registerGetRepositoryPatternTool.js +29 -0
- package/src/tools/registerGetTestingPatternTool.d.ts +5 -0
- package/src/tools/registerGetTestingPatternTool.js +15 -0
- package/src/tools/registerListGuidesTool.d.ts +6 -0
- package/src/tools/registerListGuidesTool.js +22 -0
- package/src/tools/registerListPackagesTool.d.ts +6 -0
- package/src/tools/registerListPackagesTool.js +20 -0
- package/src/tools/registerSearchDocsTool.d.ts +6 -0
- package/src/tools/registerSearchDocsTool.js +35 -0
- package/src/tools/registerSearchGuidesTool.d.ts +6 -0
- package/src/tools/registerSearchGuidesTool.js +28 -0
|
@@ -0,0 +1,657 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Authentication & Authorization
|
|
3
|
+
description: Secure your NestJS application with JWT tokens, role-based access control, custom scopes, MFA, sessions, and OAuth social login.
|
|
4
|
+
order: 6
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Authentication & Authorization
|
|
8
|
+
|
|
9
|
+
This guide covers everything you need to secure an Archipel-powered NestJS application: JWT-based authentication, role-based authorization, custom token claims (scopes), multi-factor authentication, session management, and social login via OAuth providers.
|
|
10
|
+
|
|
11
|
+
If you haven't registered `AuthModule` yet, read the [Getting Started](/guides/getting-started) guide first.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
`platform-authentication` provides:
|
|
18
|
+
|
|
19
|
+
| Capability | What it does |
|
|
20
|
+
| ------------------------ | --------------------------------------------------------------------------- |
|
|
21
|
+
| **JWT Authentication** | Issues and validates signed access tokens via Passport |
|
|
22
|
+
| **Role-Based Guards** | Restrict endpoints to specific roles using `@UseRoles()` |
|
|
23
|
+
| **Token Enrichment** | Add custom claims (subscription tier, org ID, scopes) to every JWT |
|
|
24
|
+
| **MFA** | TOTP, SMS, Email, and Push channels with backup codes |
|
|
25
|
+
| **Session Management** | Track active sessions per user, with device info and last-active timestamps |
|
|
26
|
+
| **Email Verification** | Issue and redeem time-limited verification tokens |
|
|
27
|
+
| **OAuth / Social Login** | GitHub, Google, Microsoft, and Apple strategies with account linking |
|
|
28
|
+
| **Anonymous Auth** | Allow guest access with limited capabilities |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Protecting Routes with Guards
|
|
33
|
+
|
|
34
|
+
### JWT Guard
|
|
35
|
+
|
|
36
|
+
The `JwtAuthGuard` is the primary guard. It validates the `Authorization: Bearer <token>` header, decodes the JWT, looks up the user via `AuthSubjectPort.findById()`, and attaches the subject to `request.user`.
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
40
|
+
import { JwtAuthGuard, User, type IAuthSubject } from '@breadstone/archipel-platform-authentication';
|
|
41
|
+
|
|
42
|
+
@Controller('profile')
|
|
43
|
+
export class ProfileController {
|
|
44
|
+
@Get()
|
|
45
|
+
@UseGuards(JwtAuthGuard)
|
|
46
|
+
public getProfile(@User() user: IAuthSubject): IAuthSubject {
|
|
47
|
+
return user;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The `@User()` decorator extracts the authenticated subject from the request. It returns the full `IAuthSubject` interface:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
interface IAuthSubject {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly userName: string | null;
|
|
58
|
+
readonly email: string | null;
|
|
59
|
+
readonly password: string | null;
|
|
60
|
+
readonly isVerified: boolean;
|
|
61
|
+
readonly isAnonymous: boolean;
|
|
62
|
+
readonly roles: ReadonlyArray<string>;
|
|
63
|
+
readonly mfaEnabled: boolean;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Role-Based Access Control
|
|
68
|
+
|
|
69
|
+
Use `@UseRoles()` together with `RolesGuard` to restrict endpoints to users with specific roles. Roles are string-based, so you can define them as constants in your application.
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
73
|
+
import { JwtAuthGuard, RolesGuard, UseRoles } from '@breadstone/archipel-platform-authentication';
|
|
74
|
+
|
|
75
|
+
@Controller('admin')
|
|
76
|
+
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
77
|
+
export class AdminController {
|
|
78
|
+
@Get('dashboard')
|
|
79
|
+
@UseRoles('admin')
|
|
80
|
+
public getDashboard(): string {
|
|
81
|
+
return 'admin-only content';
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@Get('reports')
|
|
85
|
+
@UseRoles('admin', 'moderator')
|
|
86
|
+
public getReports(): string {
|
|
87
|
+
return 'admin or moderator content';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`RolesGuard` reads the required roles from the `@UseRoles()` metadata and checks them against `request.user.roles`. If no roles are specified on a handler, the guard allows access (only JWT validity is enforced).
|
|
93
|
+
|
|
94
|
+
**Best practice:** Define role constants in a shared file rather than using string literals:
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
// src/constants/roles.ts
|
|
98
|
+
export const ROLE_ADMIN = 'admin';
|
|
99
|
+
export const ROLE_MODERATOR = 'moderator';
|
|
100
|
+
export const ROLE_USER = 'user';
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { ROLE_ADMIN, ROLE_MODERATOR } from '../constants/roles';
|
|
105
|
+
|
|
106
|
+
@UseRoles(ROLE_ADMIN, ROLE_MODERATOR)
|
|
107
|
+
public getReports(): string { ... }
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Anonymous Guard
|
|
111
|
+
|
|
112
|
+
For routes that should accept unauthenticated users (e.g. guest checkout), use `AnonymousAuthGuard`. It creates or resolves an anonymous subject via `AuthSubjectPort.findAnonymous()`.
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { Controller, Post, UseGuards } from '@nestjs/common';
|
|
116
|
+
import { AnonymousAuthGuard, User, type IAuthSubject } from '@breadstone/archipel-platform-authentication';
|
|
117
|
+
|
|
118
|
+
@Controller('cart')
|
|
119
|
+
export class CartController {
|
|
120
|
+
@Post()
|
|
121
|
+
@UseGuards(AnonymousAuthGuard)
|
|
122
|
+
public addToCart(@User() user: IAuthSubject): void {
|
|
123
|
+
// user.isAnonymous === true for guest users
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Accessing the Raw Token
|
|
131
|
+
|
|
132
|
+
When you need the raw JWT string (e.g. to forward it to a downstream service), use the `@Token()` decorator:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
136
|
+
import { JwtAuthGuard, Token } from '@breadstone/archipel-platform-authentication';
|
|
137
|
+
|
|
138
|
+
@Controller('proxy')
|
|
139
|
+
export class ProxyController {
|
|
140
|
+
@Get('downstream')
|
|
141
|
+
@UseGuards(JwtAuthGuard)
|
|
142
|
+
public forward(@Token() token: string): void {
|
|
143
|
+
// token = the raw Bearer token string
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Custom Token Claims (Scopes)
|
|
151
|
+
|
|
152
|
+
By default, JWTs contain base claims: `id`, `email`, and `roles`. To add application-specific claims — subscription tier, organization ID, feature scopes, permissions — implement the `TokenEnricherPort`.
|
|
153
|
+
|
|
154
|
+
### Step 1: Create the Enricher Adapter
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
// src/adapters/AppTokenEnricherAdapter.ts
|
|
158
|
+
import { Injectable } from '@nestjs/common';
|
|
159
|
+
import { TokenEnricherPort, type IAuthSubject } from '@breadstone/archipel-platform-authentication';
|
|
160
|
+
import { SubscriptionRepository } from '../subscriptions/SubscriptionRepository';
|
|
161
|
+
|
|
162
|
+
@Injectable()
|
|
163
|
+
export class AppTokenEnricherAdapter extends TokenEnricherPort {
|
|
164
|
+
private readonly _subscriptionRepository: SubscriptionRepository;
|
|
165
|
+
|
|
166
|
+
constructor(subscriptionRepository: SubscriptionRepository) {
|
|
167
|
+
super();
|
|
168
|
+
this._subscriptionRepository = subscriptionRepository;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
public async enrichClaims(subject: IAuthSubject): Promise<Record<string, unknown>> {
|
|
172
|
+
const subscription = await this._subscriptionRepository.findByUserId(subject.id);
|
|
173
|
+
|
|
174
|
+
return {
|
|
175
|
+
subscriptionTier: subscription?.tier ?? 'free',
|
|
176
|
+
organizationId: subscription?.organizationId ?? null,
|
|
177
|
+
scopes: this.resolveScopes(subject.roles, subscription?.tier),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
private resolveScopes(roles: ReadonlyArray<string>, tier?: string): ReadonlyArray<string> {
|
|
182
|
+
const scopes: Array<string> = ['read:profile'];
|
|
183
|
+
|
|
184
|
+
if (roles.includes('admin')) {
|
|
185
|
+
scopes.push('write:users', 'read:analytics', 'manage:settings');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (tier === 'pro' || tier === 'enterprise') {
|
|
189
|
+
scopes.push('export:reports', 'use:advanced-features');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return scopes;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Step 2: Register the Enricher
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
AuthModule.register({
|
|
201
|
+
authSubject: PrismaAuthSubjectAdapter,
|
|
202
|
+
mfaSubject: PrismaMfaSubjectAdapter,
|
|
203
|
+
sessionPersistence: PrismaSessionAdapter,
|
|
204
|
+
verificationSubject: PrismaVerificationAdapter,
|
|
205
|
+
tokenEnricher: AppTokenEnricherAdapter, // <-- register here
|
|
206
|
+
}),
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Step 3: Read Custom Claims in Guards or Services
|
|
210
|
+
|
|
211
|
+
The enriched claims are part of the decoded JWT. Create a custom guard to enforce scopes:
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// src/guards/ScopesGuard.ts
|
|
215
|
+
import { CanActivate, ExecutionContext, Injectable, ForbiddenException } from '@nestjs/common';
|
|
216
|
+
import { Reflector } from '@nestjs/core';
|
|
217
|
+
import { Request } from 'express';
|
|
218
|
+
|
|
219
|
+
export const SCOPES_KEY = 'required_scopes';
|
|
220
|
+
|
|
221
|
+
export function RequireScopes(...scopes: Array<string>): MethodDecorator & ClassDecorator {
|
|
222
|
+
return SetMetadata(SCOPES_KEY, scopes);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@Injectable()
|
|
226
|
+
export class ScopesGuard implements CanActivate {
|
|
227
|
+
private readonly _reflector: Reflector;
|
|
228
|
+
|
|
229
|
+
constructor(reflector: Reflector) {
|
|
230
|
+
this._reflector = reflector;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
public canActivate(context: ExecutionContext): boolean {
|
|
234
|
+
const requiredScopes = this._reflector.getAllAndOverride<Array<string>>(SCOPES_KEY, [
|
|
235
|
+
context.getHandler(),
|
|
236
|
+
context.getClass(),
|
|
237
|
+
]);
|
|
238
|
+
|
|
239
|
+
if (!requiredScopes || requiredScopes.length === 0) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const request = context.switchToHttp().getRequest<Request>();
|
|
244
|
+
const user = request.user as Record<string, unknown>;
|
|
245
|
+
const userScopes = (user['scopes'] as Array<string>) ?? [];
|
|
246
|
+
|
|
247
|
+
const hasAllScopes = requiredScopes.every((scope) => userScopes.includes(scope));
|
|
248
|
+
|
|
249
|
+
if (!hasAllScopes) {
|
|
250
|
+
throw new ForbiddenException('Insufficient scopes');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Use it on your endpoints:
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
262
|
+
import { JwtAuthGuard } from '@breadstone/archipel-platform-authentication';
|
|
263
|
+
import { ScopesGuard, RequireScopes } from '../guards/ScopesGuard';
|
|
264
|
+
|
|
265
|
+
@Controller('reports')
|
|
266
|
+
@UseGuards(JwtAuthGuard, ScopesGuard)
|
|
267
|
+
export class ReportController {
|
|
268
|
+
@Get()
|
|
269
|
+
@RequireScopes('export:reports')
|
|
270
|
+
public exportReport(): string {
|
|
271
|
+
return 'report data';
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Extending the JWT Payload
|
|
279
|
+
|
|
280
|
+
For type-safe access to custom claims, extend `JwtPayloadBase`:
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
// src/models/AppJwtPayload.ts
|
|
284
|
+
import { JwtPayloadBase } from '@breadstone/archipel-platform-authentication';
|
|
285
|
+
|
|
286
|
+
export class AppJwtPayload extends JwtPayloadBase {
|
|
287
|
+
public readonly subscriptionTier: string;
|
|
288
|
+
public readonly organizationId: string | null;
|
|
289
|
+
public readonly scopes: ReadonlyArray<string>;
|
|
290
|
+
|
|
291
|
+
constructor(
|
|
292
|
+
id: string,
|
|
293
|
+
email: string | null,
|
|
294
|
+
roles: ReadonlyArray<string>,
|
|
295
|
+
subscriptionTier: string,
|
|
296
|
+
organizationId: string | null,
|
|
297
|
+
scopes: ReadonlyArray<string>,
|
|
298
|
+
) {
|
|
299
|
+
super(id, email, roles);
|
|
300
|
+
this.subscriptionTier = subscriptionTier;
|
|
301
|
+
this.organizationId = organizationId;
|
|
302
|
+
this.scopes = scopes;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
public override toJSON(): Record<string, unknown> {
|
|
306
|
+
return {
|
|
307
|
+
...super.toJSON(),
|
|
308
|
+
subscriptionTier: this.subscriptionTier,
|
|
309
|
+
organizationId: this.organizationId,
|
|
310
|
+
scopes: [...this.scopes],
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
public static override fromJSON(raw: Record<string, unknown>): AppJwtPayload {
|
|
315
|
+
return new AppJwtPayload(
|
|
316
|
+
raw['id'] as string,
|
|
317
|
+
(raw['email'] as string) ?? null,
|
|
318
|
+
(raw['roles'] as string[]) ?? [],
|
|
319
|
+
(raw['subscriptionTier'] as string) ?? 'free',
|
|
320
|
+
(raw['organizationId'] as string) ?? null,
|
|
321
|
+
(raw['scopes'] as string[]) ?? [],
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Session Management
|
|
330
|
+
|
|
331
|
+
`SessionService` tracks active sessions per user. Combined with `LastActiveMiddleware`, it automatically updates timestamps on every authenticated request.
|
|
332
|
+
|
|
333
|
+
### Storing a Session After Login
|
|
334
|
+
|
|
335
|
+
Sessions are stored automatically when you use the built-in authentication flow. If you implement a custom login controller:
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
import { Controller, Post, UseGuards, Req, Ip } from '@nestjs/common';
|
|
339
|
+
import {
|
|
340
|
+
LocalAuthGuard,
|
|
341
|
+
AuthTokenService,
|
|
342
|
+
SessionService,
|
|
343
|
+
User,
|
|
344
|
+
type IAuthSubject,
|
|
345
|
+
} from '@breadstone/archipel-platform-authentication';
|
|
346
|
+
import { Request } from 'express';
|
|
347
|
+
|
|
348
|
+
@Controller('auth')
|
|
349
|
+
export class AuthController {
|
|
350
|
+
private readonly _tokenService: AuthTokenService;
|
|
351
|
+
private readonly _sessionService: SessionService;
|
|
352
|
+
|
|
353
|
+
constructor(tokenService: AuthTokenService, sessionService: SessionService) {
|
|
354
|
+
this._tokenService = tokenService;
|
|
355
|
+
this._sessionService = sessionService;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
@Post('login')
|
|
359
|
+
@UseGuards(LocalAuthGuard)
|
|
360
|
+
public async login(
|
|
361
|
+
@User() user: IAuthSubject,
|
|
362
|
+
@Req() req: Request,
|
|
363
|
+
@Ip() ip: string,
|
|
364
|
+
): Promise<{ accessToken: string }> {
|
|
365
|
+
const accessToken = await this._tokenService.createAccessToken(user);
|
|
366
|
+
|
|
367
|
+
await this._sessionService.store(accessToken, user.id, ip);
|
|
368
|
+
|
|
369
|
+
return { accessToken };
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Listing & Revoking Sessions
|
|
375
|
+
|
|
376
|
+
```typescript
|
|
377
|
+
@Get('sessions')
|
|
378
|
+
@UseGuards(JwtAuthGuard)
|
|
379
|
+
public async listSessions(@User() user: IAuthSubject, @Token() token: string): Promise<Array<SessionResponse>> {
|
|
380
|
+
return this._sessionService.listSessions(user.id, token);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
@Delete('sessions/:token')
|
|
384
|
+
@UseGuards(JwtAuthGuard)
|
|
385
|
+
public async revokeSession(@Param('token') sessionToken: string): Promise<void> {
|
|
386
|
+
await this._sessionService.revoke(sessionToken);
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Last-Active Middleware
|
|
391
|
+
|
|
392
|
+
`AuthModule` automatically registers `LastActiveMiddleware` on all routes. It extracts the Bearer token and updates the session's `lastActive` timestamp asynchronously — no blocking, no failure propagation.
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Multi-Factor Authentication (MFA)
|
|
397
|
+
|
|
398
|
+
Archipel supports four MFA channels out of the box:
|
|
399
|
+
|
|
400
|
+
| Channel | Method Key | How it works |
|
|
401
|
+
| --------- | ---------- | ----------------------------------------------------------- |
|
|
402
|
+
| **TOTP** | `totp` | Time-based one-time passwords (Google Authenticator, Authy) |
|
|
403
|
+
| **SMS** | `sms` | OTP sent via SMS |
|
|
404
|
+
| **Email** | `email` | OTP sent via email |
|
|
405
|
+
| **Push** | `push` | Push notification approval |
|
|
406
|
+
|
|
407
|
+
### MFA Setup Flow
|
|
408
|
+
|
|
409
|
+
1. **Initiate setup** — Call `MfaService.initSetup(userId, method)` to get setup data (QR code URI for TOTP, etc.)
|
|
410
|
+
2. **Verify setup** — Call `MfaService.verifySetup(userId, method, code)` with the initial verification code
|
|
411
|
+
3. **Receive backup codes** — On successful verification, backup codes are generated and returned
|
|
412
|
+
|
|
413
|
+
```typescript
|
|
414
|
+
import { Controller, Post, Body, UseGuards } from '@nestjs/common';
|
|
415
|
+
import { JwtAuthGuard, MfaService, User, type IAuthSubject } from '@breadstone/archipel-platform-authentication';
|
|
416
|
+
|
|
417
|
+
@Controller('mfa')
|
|
418
|
+
@UseGuards(JwtAuthGuard)
|
|
419
|
+
export class MfaController {
|
|
420
|
+
private readonly _mfaService: MfaService;
|
|
421
|
+
|
|
422
|
+
constructor(mfaService: MfaService) {
|
|
423
|
+
this._mfaService = mfaService;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
@Post('setup')
|
|
427
|
+
public async initSetup(@User() user: IAuthSubject, @Body('method') method: string) {
|
|
428
|
+
return this._mfaService.initSetup(user.id, method);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
@Post('setup/verify')
|
|
432
|
+
public async verifySetup(@User() user: IAuthSubject, @Body() body: { method: string; code: string }) {
|
|
433
|
+
return this._mfaService.verifySetup(user.id, body.method, body.code);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### MFA Login Flow
|
|
439
|
+
|
|
440
|
+
When a user with MFA enabled signs in, the `ISignInResult` indicates that a challenge is required:
|
|
441
|
+
|
|
442
|
+
```typescript
|
|
443
|
+
interface ISignInResult {
|
|
444
|
+
readonly mfaRequired: boolean;
|
|
445
|
+
readonly verificationRequired?: boolean;
|
|
446
|
+
readonly accessToken?: string;
|
|
447
|
+
readonly challengeId?: string;
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
If `mfaRequired` is `true`, the client receives a `challengeId` instead of an `accessToken`. The client must:
|
|
452
|
+
|
|
453
|
+
1. Call the MFA verification endpoint with the `challengeId` and the code from their authenticator app (or SMS/email).
|
|
454
|
+
2. On success, the server issues the actual `accessToken`.
|
|
455
|
+
|
|
456
|
+
### MFA Configuration
|
|
457
|
+
|
|
458
|
+
```env
|
|
459
|
+
AUTH_MFA_ENCRYPTION_KEY=<32-byte-hex-key>
|
|
460
|
+
AUTH_MFA_CHALLENGE_EXPIRES_IN=5m
|
|
461
|
+
AUTH_MFA_MAX_ATTEMPTS=5
|
|
462
|
+
AUTH_MFA_SMS_CODE_TTL=10m
|
|
463
|
+
AUTH_MFA_SMS_MIN_RESEND=30s
|
|
464
|
+
AUTH_MFA_EMAIL_CODE_TTL=10m
|
|
465
|
+
AUTH_MFA_EMAIL_MIN_RESEND=30s
|
|
466
|
+
AUTH_MFA_PUSH_CODE_TTL=10m
|
|
467
|
+
AUTH_MFA_PUSH_MIN_RESEND=30s
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Email Verification
|
|
473
|
+
|
|
474
|
+
`VerificationService` handles token-based email verification:
|
|
475
|
+
|
|
476
|
+
```typescript
|
|
477
|
+
import { VerificationService } from '@breadstone/archipel-platform-authentication';
|
|
478
|
+
|
|
479
|
+
// Issue a verification token (e.g., after registration)
|
|
480
|
+
const token = await verificationService.exhibitToken({ userId: user.id, email: user.email });
|
|
481
|
+
// Send this token in a verification email link
|
|
482
|
+
|
|
483
|
+
// Later, when the user clicks the link:
|
|
484
|
+
const isValid = await verificationService.verifyToken(token);
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
The token lifetime is controlled by `AUTH_VERIFY_JWT_EXPIRES_IN`.
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## Social Login (OAuth)
|
|
492
|
+
|
|
493
|
+
### Step 1: Install Provider Strategies
|
|
494
|
+
|
|
495
|
+
Import strategies from their sub-paths:
|
|
496
|
+
|
|
497
|
+
```typescript
|
|
498
|
+
import { GoogleStrategy, GOOGLE_AUTH_CONFIG_ENTRIES } from '@breadstone/archipel-platform-authentication/google';
|
|
499
|
+
import { GithubStrategy, GITHUB_AUTH_CONFIG_ENTRIES } from '@breadstone/archipel-platform-authentication/github';
|
|
500
|
+
import {
|
|
501
|
+
MicrosoftStrategy,
|
|
502
|
+
MICROSOFT_AUTH_CONFIG_ENTRIES,
|
|
503
|
+
} from '@breadstone/archipel-platform-authentication/microsoft';
|
|
504
|
+
import { AppleStrategy, APPLE_AUTH_CONFIG_ENTRIES } from '@breadstone/archipel-platform-authentication/apple';
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Step 2: Implement the Social Auth Port
|
|
508
|
+
|
|
509
|
+
```typescript
|
|
510
|
+
// src/adapters/PrismaSocialAuthAdapter.ts
|
|
511
|
+
import { Injectable } from '@nestjs/common';
|
|
512
|
+
import { SocialAuthPort, type IAuthSubject, type ISocialProfile } from '@breadstone/archipel-platform-authentication';
|
|
513
|
+
import { PrismaService } from '@breadstone/archipel-platform-database';
|
|
514
|
+
|
|
515
|
+
@Injectable()
|
|
516
|
+
export class PrismaSocialAuthAdapter extends SocialAuthPort {
|
|
517
|
+
private readonly _prisma: PrismaService;
|
|
518
|
+
|
|
519
|
+
constructor(prisma: PrismaService) {
|
|
520
|
+
super();
|
|
521
|
+
this._prisma = prisma;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
public async findOrCreateByProfile(profile: ISocialProfile): Promise<IAuthSubject> {
|
|
525
|
+
// Look up by provider + email
|
|
526
|
+
let user = await this._prisma.user.findFirst({
|
|
527
|
+
where: { email: profile.email },
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
if (!user) {
|
|
531
|
+
user = await this._prisma.user.create({
|
|
532
|
+
data: {
|
|
533
|
+
email: profile.email,
|
|
534
|
+
userName: profile.userName ?? profile.displayName,
|
|
535
|
+
isVerified: true, // OAuth emails are pre-verified
|
|
536
|
+
isAnonymous: false,
|
|
537
|
+
roles: ['user'],
|
|
538
|
+
mfaEnabled: false,
|
|
539
|
+
},
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return user as unknown as IAuthSubject;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### Step 3: Register with Additional Config
|
|
549
|
+
|
|
550
|
+
```typescript
|
|
551
|
+
AuthModule.register({
|
|
552
|
+
authSubject: PrismaAuthSubjectAdapter,
|
|
553
|
+
mfaSubject: PrismaMfaSubjectAdapter,
|
|
554
|
+
sessionPersistence: PrismaSessionAdapter,
|
|
555
|
+
verificationSubject: PrismaVerificationAdapter,
|
|
556
|
+
socialAuth: PrismaSocialAuthAdapter,
|
|
557
|
+
socialStrategies: [GoogleStrategy, GithubStrategy],
|
|
558
|
+
additionalConfigEntries: [
|
|
559
|
+
...GOOGLE_AUTH_CONFIG_ENTRIES,
|
|
560
|
+
...GITHUB_AUTH_CONFIG_ENTRIES,
|
|
561
|
+
],
|
|
562
|
+
}),
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Step 4: Set Environment Variables
|
|
566
|
+
|
|
567
|
+
```env
|
|
568
|
+
# Google
|
|
569
|
+
AUTH_GOOGLE_CLIENT_ID=your-client-id
|
|
570
|
+
AUTH_GOOGLE_CLIENT_SECRET=your-client-secret
|
|
571
|
+
AUTH_GOOGLE_CALLBACK_URL=https://yourapp.com/auth/google/callback
|
|
572
|
+
AUTH_GOOGLE_SCOPE=email,profile
|
|
573
|
+
|
|
574
|
+
# GitHub
|
|
575
|
+
AUTH_GITHUB_CLIENT_ID=your-client-id
|
|
576
|
+
AUTH_GITHUB_CLIENT_SECRET=your-client-secret
|
|
577
|
+
AUTH_GITHUB_CALLBACK_URL=https://yourapp.com/auth/github/callback
|
|
578
|
+
AUTH_GITHUB_SCOPE=user:email
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### Using the Social Auth Guard
|
|
582
|
+
|
|
583
|
+
The `SocialAuthGuard` is a dynamic guard that routes to the correct Passport strategy based on a URL parameter:
|
|
584
|
+
|
|
585
|
+
```typescript
|
|
586
|
+
import { Controller, Get, UseGuards, Req, Param } from '@nestjs/common';
|
|
587
|
+
import { socialAuthGuardFactory, User, type IAuthSubject } from '@breadstone/archipel-platform-authentication';
|
|
588
|
+
|
|
589
|
+
@Controller('auth')
|
|
590
|
+
export class OAuthController {
|
|
591
|
+
@Get(':provider')
|
|
592
|
+
@UseGuards(socialAuthGuardFactory(':provider'))
|
|
593
|
+
public initOAuth(): void {
|
|
594
|
+
// Passport redirects to the provider
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
@Get(':provider/callback')
|
|
598
|
+
@UseGuards(socialAuthGuardFactory(':provider'))
|
|
599
|
+
public async handleCallback(@User() user: IAuthSubject): Promise<{ accessToken: string }> {
|
|
600
|
+
const accessToken = await this._tokenService.createAccessToken(user);
|
|
601
|
+
return { accessToken };
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
Supported providers: `github`, `google`, `microsoft`, `apple`.
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
## Environment Variables Reference
|
|
611
|
+
|
|
612
|
+
| Variable | Required | Default | Description |
|
|
613
|
+
| ------------------------------- | -------- | ------- | ---------------------------------------- |
|
|
614
|
+
| `AUTH_JWT_SECRET` | Yes | — | Secret for signing JWTs |
|
|
615
|
+
| `AUTH_JWT_EXPIRES_IN` | Yes | — | Access token lifetime (e.g. `15m`, `1h`) |
|
|
616
|
+
| `AUTH_VERIFY_JWT_EXPIRES_IN` | No | — | Verification token lifetime |
|
|
617
|
+
| `AUTH_MFA_ENCRYPTION_KEY` | No\* | — | AES key for encrypting MFA secrets |
|
|
618
|
+
| `AUTH_MFA_CHALLENGE_EXPIRES_IN` | No | `5m` | MFA challenge TTL |
|
|
619
|
+
| `AUTH_MFA_MAX_ATTEMPTS` | No | `5` | Max failed MFA attempts before lockout |
|
|
620
|
+
| `AUTH_GOOGLE_CLIENT_ID` | No\* | — | Google OAuth client ID |
|
|
621
|
+
| `AUTH_GOOGLE_CLIENT_SECRET` | No\* | — | Google OAuth client secret |
|
|
622
|
+
| `AUTH_GOOGLE_CALLBACK_URL` | No\* | — | Google OAuth callback URL |
|
|
623
|
+
| `AUTH_GOOGLE_SCOPE` | No | — | Google OAuth scopes (comma-separated) |
|
|
624
|
+
| `AUTH_GITHUB_CLIENT_ID` | No\* | — | GitHub OAuth client ID |
|
|
625
|
+
| `AUTH_GITHUB_CLIENT_SECRET` | No\* | — | GitHub OAuth client secret |
|
|
626
|
+
| `AUTH_GITHUB_CALLBACK_URL` | No\* | — | GitHub OAuth callback URL |
|
|
627
|
+
| `AUTH_MICROSOFT_CLIENT_ID` | No\* | — | Microsoft OAuth client ID |
|
|
628
|
+
| `AUTH_MICROSOFT_CLIENT_SECRET` | No\* | — | Microsoft OAuth client secret |
|
|
629
|
+
| `AUTH_MICROSOFT_CALLBACK_URL` | No\* | — | Microsoft OAuth callback URL |
|
|
630
|
+
| `AUTH_MICROSOFT_TENANT` | No | — | Microsoft tenant ID or `common` |
|
|
631
|
+
| `AUTH_APPLE_CLIENT_ID` | No\* | — | Apple Sign-In service ID |
|
|
632
|
+
| `AUTH_APPLE_PRIVATE_KEY` | No\* | — | Apple Sign-In private key (PEM) |
|
|
633
|
+
| `AUTH_APPLE_TEAM_ID` | No\* | — | Apple developer team ID |
|
|
634
|
+
| `AUTH_APPLE_KEY_ID` | No\* | — | Apple Sign-In key ID |
|
|
635
|
+
| `AUTH_APPLE_CALLBACK_URL` | No\* | — | Apple Sign-In callback URL |
|
|
636
|
+
|
|
637
|
+
\*Required only when the corresponding feature (MFA or specific OAuth provider) is enabled.
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## Security Best Practices
|
|
642
|
+
|
|
643
|
+
1. **Keep `AUTH_JWT_SECRET` strong and rotated.** Use at least 256 bits of entropy. Never commit it to source control.
|
|
644
|
+
2. **Set short token lifetimes.** Use `15m` for access tokens and combine with session-based refresh logic.
|
|
645
|
+
3. **Always combine guards.** Use `JwtAuthGuard` + `RolesGuard` together. JWT alone only proves identity, not authorization.
|
|
646
|
+
4. **Validate at the boundary.** Use DTOs with `class-validator` decorators on all input. Never trust claims blindly.
|
|
647
|
+
5. **Use the `TokenEnricherPort` for scopes.** Don't hardcode authorization logic in guards. Derive scopes at token creation time and verify them declaratively.
|
|
648
|
+
6. **Enable MFA for sensitive operations.** Even if MFA isn't globally required, protect high-value actions (password change, payment) with step-up authentication.
|
|
649
|
+
7. **Monitor sessions.** Expose session listing to users so they can revoke unfamiliar sessions.
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## Next Steps
|
|
654
|
+
|
|
655
|
+
- Read the [Implementing Ports](/guides/implementing-ports) guide for details on writing all four required port adapters
|
|
656
|
+
- Browse the [platform-authentication API reference](/packages/platform-authentication/api/) for complete method signatures
|
|
657
|
+
- See the [Testing](/guides/testing) guide for patterns to mock auth in unit and integration tests
|