Changelog
Version history for all nestarc packages. Each package follows Semantic Versioning.
@nestarc/tenancy
0.13.0
- Added
TenantCacheInterceptorfor Nest response cache keys scoped by the current tenant - Added
@SharedTenantCache()for routes that intentionally share cache entries across tenants - Added
@nestarc/tenancy/cachesubpath exports and optional@nestjs/cache-manager/cache-managerpeer metadata - Kept the root
@nestarc/tenancyentrypoint free of eager cache runtime imports - Fixed NestJS 10 middleware wildcard registration while preserving NestJS 11 named wildcard support
0.12.0
- Breaking: removed deprecated flat cross-check options; use
crossCheck: { extractor, onFailed, required } - Added
engines.nodemetadata for documented Node.js support - Moved
promptsto regular dependencies so the interactive CLI works in normal installs - Made CLI shebang injection idempotent
- Added public API smoke coverage for root and testing entrypoints
- Added v0.12.0 cross-check migration guidance and clarified JWT extraction,
@BypassTenancy(),withoutTenant(), and interactive transaction usage
0.8.0
- Microservice propagation: HTTP, Bull, Kafka, gRPC propagators
TenantContextInterceptorfor inbound context restorationcrossCheckExtractorfor tenant ID forgery prevention- OpenTelemetry integration (opt-in)
- Error hierarchy:
TenantContextMissingErrorbase class - CLI
checkcommand for drift detection - Multi-schema support (
@@schema()directives)
0.7.0
failClosedmode for Prisma extensioninteractiveTransactionSupportoptiontenancyTransaction()helper for interactive transactions- Event system via
@nestjs/event-emitter
0.6.0
autoInjectTenantIdfor create/upsert operationssharedModelsto skip RLS for specific modelswithoutTenant()programmatic bypass- ccTLD-aware subdomain extraction
0.5.0
- Initial public release
- 5 built-in extractors (Header, Subdomain, JWT Claim, Path, Composite)
- AsyncLocalStorage-based tenant context
- Prisma Client Extension with
set_config() - CLI
initcommand for RLS scaffolding
@nestarc/safe-response
0.15.0
- Added
createSafeException()for typedSafeExceptionsubclasses fromdefineErrors()catalogs - Added
ApiSafeCatalogError()andApiSafeCatalogErrors()Swagger decorators for catalog-backed error documentation - Added
fieldSelectionsupport to composite decorators anderrorFormat: 'safe' | 'problem'for explicit error schema selection - Added
maxFieldsandmaxFieldLengthfield selection quotas - Hardened field selection against inherited properties and reserved path segments such as
__proto__,prototype, andconstructor - Tightened pagination and rate-limit metadata validation, and avoided double-writing already-sent Express/Fastify error responses
0.14.0
- Field selection / partial response support via Google-style
?fields=id,name,address.city @FieldSelection()decorator and globalfieldSelectionmodule option- Error catalog support with
defineErrors()andSafeException - API version metadata via the
versionmodule option - Automatic
StreamableFiledetection to skip response wrapping for file downloads - New client guard:
hasFieldSelection()
0.13.1
- Rate limit metadata mirroring (
X-RateLimit-*headers) nestjs-clsintegration for context injection
0.13.0
- API deprecation (
@Deprecated()decorator) with RFC 9745/8594 headers - Composite decorators:
@SafeEndpoint(),@SafePaginatedEndpoint(),@SafeCursorPaginatedEndpoint()
0.12.0
- RFC 9457 Problem Details support
- Frontend client types (
@nestarc/safe-response/client) nestjs-i18nintegration
0.11.0
- Request ID tracking
- Response time in meta
- Cursor pagination support (
@CursorPaginated())
0.10.0
- Initial public release
- Automatic response wrapping
- Error standardization
- Offset pagination metadata
- Swagger integration
@nestarc/audit-log
0.2.0
- Breaking:
createAuditExtension({})now audits all Prisma models by default; settrackedModelsorignoredModelsexplicitly to narrow scope - Breaking:
trackedModels: []now audits no models, even whenignoredModelsis also set - Added
onAuditError,logger,logFailures,ignoreTimestampOnlyUpdates,tenantResolver,sensitiveFieldsByModel, and customprismaModuleoptions - Added async actor extraction, route exclusions, correlation ID metadata, public
AuditInterceptor/AuditActorMiddlewareexports, and@AuditReason() - Added dynamic audit table SQL with schema-qualified table names, trigger append-only enforcement, optional GIN indexes, monthly partitions, and
ensurePartitions() - Added
AuditService.prune()for flat-table and partitioned retention maintenance - Added Query API v2 with deterministic keyset cursors, optional totals,
getById(), explicittenantId, andallTenantsadmin reads - Documented the transaction contract: automatic audit inserts are best-effort outside caller transactions unless
experimentalTxAuditis enabled - Fixed primary-key projection handling, wildcard escaping, audit pre-read failure handling, and Nest 11 middleware wildcard warnings
0.1.0
- Initial release
- Automatic CUD tracking via Prisma
$extends - Before/after diffs with deep JSON comparison
- Sensitive field masking
- Manual logging API with transaction support
- Query API with wildcard filters
@NoAudit()/@AuditAction()decorators- Append-only PostgreSQL storage
- Multi-tenant integration with
@nestarc/tenancy
@nestarc/feature-flag
0.3.0
- Published v0.3.0 release
- See the GitHub compare for detailed changes
0.2.0
- Pluggable cache adapters —
CacheAdapterinterface withMemoryCacheAdapter(default) andRedisCacheAdapter - Redis Pub/Sub — cross-instance cache invalidation via SCAN-based flush
- Admin REST API —
FeatureFlagAdminModulewith mandatory guard injection (7 endpoints) - Repository pattern —
FeatureFlagRepositoryinterface withPrismaFeatureFlagRepositorydefault - Tenant context provider —
TenantContextProviderinterface with automatic@nestarc/tenancyintegration findByKey()andremoveOverride()methods onFeatureFlagService- All cache operations are now async (
CacheAdapterinterface) cacheAdapteroption added toFeatureFlagModuleOptionssetOverride()throwsNotFoundExceptioninstead of genericError- Admin endpoints return proper 404/409 status codes instead of 500
- Override race conditions resolved (concurrent set/delete no longer 500)
0.1.0
- Initial release
- Database-backed feature flags
@FeatureFlag()guard decorator@BypassFeatureFlag()decorator- Percentage rollouts with murmurhash3
- Tenant / user / environment overrides
- 6-layer evaluation cascade
- Built-in caching with TTL
- Event system via
@nestjs/event-emitter TestFeatureFlagModulefor testing
@nestarc/soft-delete
0.4.0
- Stability release with PostgreSQL-backed E2E coverage for cascade soft-delete, cascade restore, purge, lifecycle events, and full NestJS HTTP integration
- Fixed cascade restore so nested soft-deleted descendants restore through a
withDeletedcontext - Hardened NestJS DI metadata for interceptor and optional event emitter injection
- Release workflow now runs PostgreSQL E2E before npm publish
- Excludes
dist/.tsbuildinfofrom the npm package
0.2.0
- Cascade soft-delete and restore
forceDelete()for hard deletespurge()with scheduled cleanup- Standalone
createPrismaSoftDeleteExtension
0.1.0
- Initial release
- Automatic soft-delete via Prisma extension
- Transparent query filtering
@WithDeleted(),@OnlyDeleted(),@SkipSoftDelete()decorators- Actor tracking (
deletedByField) - Lifecycle events
@nestarc/pagination
0.1.0
- Initial release
- Offset + cursor pagination
- 12 filter operators
- Multi-column sorting with null positioning
- Full-text search
- Column/operator whitelisting
- Swagger auto-documentation
- Standalone
paginate()function TestPaginationModulefor testing
@nestarc/idempotency
0.4.0
- Added
processingTtlfor separate in-flight PROCESSING leases and completed replay TTLs - Added
keyResolver,maxKeyLength, and custom fingerprint resolvers for webhook event ids, command ids, and semantic request fingerprints - Added
observability.onEvent,Idempotency-Status, andIdempotency-Replayedresponse headers - Exported
PostgresStoragefrom the storage barrel - Clarified draft-07-compatible behavior and the HTTP-boundary guarantee
0.3.0
- Stable JSON request fingerprinting so object key order does not cause false 422 responses
- Safe response header capture and replay for
Content-Type,Location,ETag,Cache-Control, andX-*headers - Fastify adapter E2E verification
- Real Redis smoke coverage in CI
- Default endpoint scoping now uses the actual request path without query string
- Postgres migration: add
response_headers JSONBto existing idempotency records
0.1.3
- Token-based compare-and-set for TTL-expiry race prevention
- Per-endpoint key scoping via
PATH_METADATA(HTTP_METHOD /route:: prefix) - TTL boundary validation (positive integer only)
- Concurrent duplicate regression coverage
- Transient
storage.complete()failure no longer causes duplicate execution
0.1.0
- Initial release
- IETF
httpapi-idempotency-key-header-07state machine (400 / 409 / 422) @Idempotent()decorator with per-handler overridesIdempotencyInterceptorwith opt-in wiring (global / controller / method)MemoryStorageandRedisStorageadapters- SHA-256 request body fingerprint
- Response replay (status code + body)
- Configurable scope (
endpoint/global/ custom function) - Binary response detection and bypass
@nestarc/outbox
0.1.0
- Initial release
- Prisma-native transactional outbox table and SQL migration
- Polling with
FOR UPDATE SKIP LOCKEDfor multi-replica safety @OnOutboxEvent()decorator and type-safe event classes- Fixed and exponential retry backoff strategies
- Stuck event recovery and graceful shutdown
- Local transport plus custom transport adapter support
@nestarc/webhook
0.12.1
- Fixed successful-delivery circuit-breaker resets to avoid rewriting already-healthy endpoint rows
- Reduced
webhook_endpointsrow-lock contention during high-throughput worker scale-out
0.2.0
- Outbound webhook delivery with endpoint, event, and delivery tables
- HMAC-SHA256 signatures using Standard Webhooks-compatible headers
- Exponential retry schedule with jitter and circuit breaker support
- Dead letter queue and full delivery-attempt logs
- Multi-instance safe polling with
FOR UPDATE SKIP LOCKED - SSRF defenses for endpoint registration and dispatch
- Ports/adapters architecture for Prisma and fetch customization
@nestarc/api-keys
0.1.0
- Initial release
- Stripe-style key format with indexable prefixes
- SHA-256 hashing with versioned pepper rotation
- Live/test environment isolation
- Scope guards and tenant-scoped key context
@nestarc/rbac
0.1.0
- Initial public release of tenant-aware RBAC primitives for NestJS SaaS applications
- Optional Prisma/PostgreSQL persistence through
@nestarc/rbac/prisma PrismaRbacStorageimplementation of theRbacStoragecontract- Prisma schema example and initial RBAC SQL migration for consuming applications
- Public testing helpers through
@nestarc/rbac/testing - Optional integration helpers for
@nestarc/tenancyand@nestarc/api-keys - Audit event emission for RBAC write operations and denied guard decisions
tenant.allowGlobalRolesInTenantsupport for explicit global-role opt-in- Multi-entry ESM, CJS, and type declaration output
- Documentation for installation, guards, Prisma setup, testing utilities, and integrations
@nestarc/mcp-guard
Labs tooling
@nestarc/mcp-guard is published under the @nestarc npm scope, but it is separate from the NestJS SaaS package lineup.
0.2.0
- Discovery mode for Cursor, VS Code, Claude Code, and Claude Desktop MCP config locations
- Discovery options:
--client,--scope, and--list-targets - Aggregate JSON schema v2 and grouped text output
- Server normalization now preserves
headers,envFile, andtypefields MCPG001scans secret-like header keys as well as environment variables
@nestarc/data-subject
0.1.0
- Initial release
- Declarative entity registry for export and erase policies
DataSubjectServicelifecycle for request lookup, export, and erase- Delete, anonymize, retain, and mixed strategies per field
- Legal retention support with explicit basis and retention windows
- Prisma executor plus in-memory request and artifact stores
- Outbox-style event publisher integration
@nestarc/jobs
0.1.0
- Initial release
- In-memory backend with weighted tenant fairness and starvation protection
- BullMQ backend for Redis-backed production workers
@JobHandler()provider discovery- Context propagation through pluggable extractors and runners
- Outbox-to-jobs bridge
FakeJobsServicefor deterministic tests