@anarchitects/auth-ts
v0.0.1
Published
TypeBox DTO schemas and RBAC domain models for the Anarchitecture auth stack.
Maintainers
Readme
@anarchitects/auth-ts
TypeScript DTOs and domain models for the Anarchitecture authentication stack. The package bundles:
- Contract-driven request/response schemas generated with TypeBox
- Type-safe DTO aliases that line up with the OpenAPI contract (
contracts/openapi.yaml) - Domain models (
User,Role,Permission) for composing dynamic RBAC logic across services
Use it to validate inbound/outbound payloads, share typings between Angular/Nest bricks, and keep auth-specific logic consistent across tiers.
Installation
npm install @anarchitects/auth-ts
# or
yarn add @anarchitects/auth-ts
# or
pnpm add @anarchitects/auth-tsPackage structure
| Import path | Description |
| ------------------------------ | ------------------------------------------------ |
| @anarchitects/auth-ts | Barrel re-export for everything in this library |
| @anarchitects/auth-ts/dtos | Request/response schemas and DTO types (TypeBox) |
| @anarchitects/auth-ts/models | Persistence-facing domain models used for RBAC |
Usage
Validating DTO payloads
import { Value } from '@sinclair/typebox/value';
import { LoginRequestSchema, LoginRequestDTO } from '@anarchitects/auth-ts/dtos';
const payload: LoginRequestDTO = {
credential: '[email protected]',
password: 'secret123',
};
const errors = [...Value.Errors(LoginRequestSchema, payload)];
if (errors.length > 0) {
// handle validation error details
}Note: TypeBox does not ship built-in email validation. Register the format once in your runtime (for example, during app bootstrap):
import { FormatRegistry } from '@sinclair/typebox'; FormatRegistry.Set('email', (value: unknown): value is string => { return typeof value === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); });
Working with domain models
import { User, Role, Permission } from '@anarchitects/auth-ts/models';
function can(user: User, action: string, subject: string): boolean {
const roles: Role[] = user.roles ?? [];
return roles.some((role) => (role.permissions ?? []).some((permission: Permission) => permission.action === action && permission.subject === subject));
}The models include timestamps (createdAt, updatedAt) and bidirectional relationships to support dynamic RBAC composition in persistence layers.
Scripts
nx build auth-ts— build the distributable package with Vite.nx test auth-ts— run the Vitest suite (DTO schema checks and type-level assertions).
Contributing
Auth DTOs derive from contracts/openapi.yaml. Update the contract first, regenerate DTOs, then extend this package so every stack (Angular, Nest, shared TS) stays in sync.
License
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this package except in compliance with the License. You may obtain a copy of the License at the linked address or in the repository's LICENSE file. Unless required by applicable law or agreed to in writing, distributed code is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
