Chuyển đến nội dung

Package root

Đường dẫn import: @sdcorejs/nestjs

Entrypoint root bootstrap thư viện và re-export những contract mà phần lớn ứng dụng cần trong root module. Dùng các subpath đã được tài liệu hóa để truy cập đầy đủ API theo từng feature.

Bootstrap

ts
import { Module } from '@nestjs/common';
import { SdCoreModule } from '@sdcorejs/nestjs';
import { z } from 'zod';

const PrincipalSchema = z.object({
  sub: z.string().min(1),
  tenant: z.string().min(1).max(64),
  roles: z.array(z.string().min(1)).optional(),
});

@Module({
  imports: [
    SdCoreModule.forRoot({
      context: {
        identity: {
          principalResolver: (principal: unknown) => {
            const claims = PrincipalSchema.parse(principal);
            return {
              userId: claims.sub,
              tenant: claims.tenant,
              roles: claims.roles,
            };
          },
        },
      },
      cache: { backend: 'memory', ttl: 60, maxEntries: 1_000 },
      http: {
        baseURL: 'https://inventory.internal.example',
        trustedOrigins: ['https://inventory.internal.example'],
      },
      jwt: {
        jwks: { allowedIssuerHosts: ['https://identity.example.com'] },
        audience: 'inventory-api',
      },
      i18n: { supportedLanguages: ['en', 'vi'], fallbackLanguage: 'en' },
    }),
  ],
})
export class AppModule {}

SdCoreModule.forRoot(options?: SdCoreModuleOptions): DynamicModule là global. Các module context, tenancy, audit, permission, cache và HTTP luôn được nối dây. JWT, i18n, uploaded files, action history, job scheduler và BullMQ chỉ được nối dây khi có option tương ứng.

SdCoreModuleOptions

Thuộc tínhKiểuMặc định / tác động
contextContextModuleOptionsHeader mặc định; mapper verified-principal; chế độ trusted-header tắt
tenancyTenancyModuleOptionsStrategy mặc định fail-closed cho entity có scope
auditAuditModuleOptionsDefaultAuditStrategy
permissionPermissionModuleOptionsDefaultPermissionStrategy deny-all
cacheCacheConfigLRU trong bộ nhớ, TTL 60 giây, 1,000 entry
httpHttpClientConfigTimeout 30 giây; không có origin truyền tiếp tin cậy
jwtJwtConfigBỏ qua để tắt việc nối dây module JWT
i18nI18nModuleOptionsBỏ qua để không dịch thông báo lỗi của thư viện
internalSecret{ envVar?: string } | { key: string }Bỏ qua để không đăng ký internal secret tích hợp; key tĩnh đã deprecated
uploadedFileUploadedFileConfigBỏ qua để tắt provider uploaded-file
actionHistoryActionHistoryModuleOptionsBỏ qua để tắt provider action-history
jobSchedulerJobSchedulerModuleOptionsBỏ qua để tắt provider khóa job trong cơ sở dữ liệu
queueQueueModuleConfigBỏ qua để tắt việc nối dây BullMQ
providersProvider[]Provider mở rộng global bổ sung

Nên dùng triển khai IInternalSecretProvider dựa trên môi trường hoặc có khả năng xoay vòng; không bao giờ nhúng secret production vào source.

Bảng export của root

ExportLoạiMục đích
SdCoreModuleclassModule kết hợp global; forRoot(options?)
SdCoreModuleOptions, InternalSecretConfigtypeContract cấu hình root
ContextServiceclassRequest context dựa trên AsyncLocalStorage
ContextIdentityOptions, HeadersConfig, IdentityContextSource, RequestContexttypeCấu hình request-context và hình dạng store
ResolvedContextIdentity, ResolvedContextIdentityOptions, TrustedHeaderIdentityOptions, VerifiedPrincipalResolvertypeContract ánh xạ danh tính tin cậy
defaultVerifiedPrincipalResolverfunctionMapper thận trọng cho claim sub/userId/id
CONTEXT_HEADERS_CONFIG, CONTEXT_IDENTITY_CONFIGvalueDI token của context
ITenancyStrategy, IAuditStrategy, IPermissionStrategytypeContract mở rộng tenancy, audit và permission
TENANCY_STRATEGY, AUDIT_STRATEGY, PERMISSION_STRATEGYvalueDI token của strategy
PERMISSION_METADATA_KEYvalueKhóa metadata của decorator permission
HasPermission, HasAnyPermissiondecoratorGắn các mã permission bắt buộc
InternalGuard, INTERNAL_SECRET_HEADERclass/valueGuard lời gọi nội bộ và header x-internal-secret mặc định
IInternalSecretProvider, INTERNAL_SECRET_PROVIDERtype/valueNguồn secret có thể xoay vòng và DI token
IInternalContextEnricher, INTERNAL_CONTEXT_ENRICHERtype/valueHook trusted-context sau khi xác minh secret và DI token
ApiErrorBody, ApiResponseEnvelopetypeHình dạng error và response chuẩn
apiError, ApiResponsevalueHelper tạo response envelope
ZodValidationGuard, parseZodfunctionFactory guard request Zod và parser trực tiếp
ZodSchemaMap, ZodSource, ZodIssueDetailtypeContract nguồn validation và issue
II18nResolver, ILanguageResolvertypeContract dịch và phân giải ngôn ngữ
I18N_RESOLVER, LANGUAGE_RESOLVERvalueDI token i18n

Helper response

ts
interface ApiErrorBody {
  code: string;
  message: string;
  data?: Record<string, unknown>;
}

interface ApiResponseEnvelope<T = unknown> {
  data?: T;
  error?: ApiErrorBody;
}

ApiResponse.ok(data), ApiResponse.noContent()ApiResponse.error(code, message, data?) tạo envelope. apiError(code, message, data?) tạo body mà cơ chế xử lý exception của thư viện mong đợi.

Phát hành theo giấy phép MIT.