
Product
Introducing Socket Firewall Enterprise: Flexible, Configurable Protection for Modern Package Ecosystems
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.
jsq-ticket-type
Advanced tools
TypeScript type definitions for ticket system - microservices types with comprehensive settings management
TypeScript type definitions for ticket system - microservices types with comprehensive settings management. This package provides type definitions, interfaces, enums, and constants for consistent data structures between backend and frontend.
🎉 New Settings Management System
types/
├── index.ts # Main export file
├── enums.ts # All enums from backend (includes settings enums)
├── interfaces.ts # Entity interfaces and common types (includes settings interfaces)
├── dtos.ts # Data Transfer Objects for API calls (includes settings DTOs)
├── constants.ts # Constants and configuration values (includes settings constants)
└── README.md # This documentation
npm install jsq-ticket-type
// Import semua types
import * as TicketTypes from 'jsq-ticket-type';
// Import spesifik
import { UserRole, EventStatus, CreateEventDto } from 'jsq-ticket-type';
// Import dari file tertentu (jika diperlukan)
import { UserRole } from 'jsq-ticket-type/types/enums';
import { User, Event } from 'jsq-ticket-type/types/interfaces';
import { CreateUserDto } from 'jsq-ticket-type/types/dtos';
import { API_ENDPOINTS } from 'jsq-ticket-type/types/constants';
import {
UserRole,
EventStatus,
SettingCategory,
FeatureFlagStatus,
EmailTemplateType
} from 'jsq-ticket-type';
// Basic enums
const userRole = UserRole.ADMIN;
const eventStatus = EventStatus.PUBLISHED;
// Settings enums
const settingCategory = SettingCategory.SECURITY;
const flagStatus = FeatureFlagStatus.ACTIVE;
const templateType = EmailTemplateType.WELCOME;
// For dropdown options
const categoryOptions = Object.values(SettingCategory).map(category => ({
value: category,
label: category.charAt(0) + category.slice(1).toLowerCase()
}));
import {
SystemSetting,
FeatureFlag,
EmailTemplate,
SettingsHistory
} from 'jsq-ticket-type';
// Settings state management
interface SettingsState {
systemSettings: SystemSetting[];
featureFlags: FeatureFlag[];
emailTemplates: EmailTemplate[];
settingsHistory: SettingsHistory[];
loading: boolean;
}
// Settings component props
interface SettingsCardProps {
setting: SystemSetting;
onEdit: (setting: SystemSetting) => void;
onDelete: (id: string) => void;
}
// Feature flag evaluation
interface FlagEvaluationContext {
userId?: string;
userRole?: string;
country?: string;
deviceType?: string;
}
import {
CreateSystemSettingDto,
CreateFeatureFlagDto,
CreateEmailTemplateDto,
EvaluateFeatureFlagDto,
RenderTemplateDto
} from 'jsq-ticket-type';
// Create system setting
const createSetting = async (data: CreateSystemSettingDto) => {
const response = await api.post('/settings', data);
return response.data;
};
// Evaluate feature flag
const evaluateFlag = async (data: EvaluateFeatureFlagDto) => {
const response = await api.post('/feature-flags/evaluate', data);
return response.data;
};
// Render email template
const renderTemplate = async (data: RenderTemplateDto) => {
const response = await api.post('/email-templates/render', data);
return response.data;
};
// Settings form validation
const validateSettingForm = (data: Partial<CreateSystemSettingDto>) => {
const errors: Partial<Record<keyof CreateSystemSettingDto, string>> = {};
if (!data.category) {
errors.category = 'Category is required';
}
if (!data.key) {
errors.key = 'Key is required';
}
if (data.value === undefined) {
errors.value = 'Value is required';
}
return errors;
};
import { API_ENDPOINTS, STATUS_COLORS, DEFAULTS } from 'jsq-ticket-type';
// Settings API calls
const fetchSettings = () => {
return api.get(API_ENDPOINTS.SETTINGS.BASE);
};
const fetchFeatureFlags = () => {
return api.get(API_ENDPOINTS.FEATURE_FLAGS.BASE);
};
const fetchEmailTemplates = () => {
return api.get(API_ENDPOINTS.EMAIL_TEMPLATES.BASE);
};
// Settings UI styling
const getSettingStatusColor = (setting: SystemSetting) => {
if (!setting.isActive) return STATUS_COLORS.INACTIVE_SETTING;
if (setting.isEncrypted) return STATUS_COLORS.ENCRYPTED;
if (setting.requiresRestart) return STATUS_COLORS.REQUIRES_RESTART;
return STATUS_COLORS.ACTIVE_SETTING;
};
const getFlagStatusColor = (flag: FeatureFlag) => {
switch (flag.status) {
case 'ACTIVE': return STATUS_COLORS.ACTIVE_FLAG;
case 'TESTING': return STATUS_COLORS.TESTING_FLAG;
case 'DEPRECATED': return STATUS_COLORS.DEPRECATED_FLAG;
case 'ARCHIVED': return STATUS_COLORS.ARCHIVED_FLAG;
default: return STATUS_COLORS.INACTIVE_FLAG;
}
};
// Default values for forms
const getDefaultSetting = (): Partial<CreateSystemSettingDto> => ({
category: DEFAULTS.SETTINGS.CATEGORY,
dataType: DEFAULTS.SETTINGS.DATA_TYPE,
environment: DEFAULTS.SETTINGS.ENVIRONMENT,
isActive: DEFAULTS.SETTINGS.IS_ACTIVE,
isEncrypted: DEFAULTS.SETTINGS.IS_ENCRYPTED,
requiresRestart: DEFAULTS.SETTINGS.REQUIRES_RESTART,
});
const getDefaultFeatureFlag = (): Partial<CreateFeatureFlagDto> => ({
type: DEFAULTS.FEATURE_FLAG.TYPE,
status: DEFAULTS.FEATURE_FLAG.STATUS,
scope: DEFAULTS.FEATURE_FLAG.SCOPE,
isEnabled: DEFAULTS.FEATURE_FLAG.IS_ENABLED,
rolloutPercentage: DEFAULTS.FEATURE_FLAG.ROLLOUT_PERCENTAGE,
isPermanent: DEFAULTS.FEATURE_FLAG.IS_PERMANENT,
});
Berisi semua enum yang digunakan di backend:
UserRole - Role pengguna (admin, promotor, artist, user)EventStatus - Status event (draft, published, cancelled, dll)OrderStatus - Status pesananPaymentStatus - Status pembayaranNotificationType - Tipe notifikasiSettingCategory - Kategori pengaturan sistem (SECURITY, EMAIL, PAYMENT, dll)SettingDataType - Tipe data pengaturan (STRING, NUMBER, BOOLEAN, JSON, dll)SettingEnvironment - Environment pengaturan (DEVELOPMENT, STAGING, PRODUCTION, ALL)FeatureFlagStatus - Status feature flag (ACTIVE, INACTIVE, TESTING, dll)FeatureFlagType - Tipe feature flag (BOOLEAN, PERCENTAGE, USER_LIST, dll)EmailTemplateType - Tipe template email (SYSTEM, MARKETING, TRANSACTIONAL, dll)Berisi interface untuk entitas dan tipe data umum:
User, Event, Ticket, Order, Payment - Entitas utamaSystemSetting - Interface pengaturan sistem dengan validasi dan enkripsiFeatureFlag - Interface feature flag dengan targeting dan rolloutEmailTemplate - Interface template email dengan versioning dan lokalisasiSettingsHistory - Interface riwayat perubahan pengaturanPaginatedResult<T> - Hasil dengan paginationApiResponse<T> - Response API standarJwtPayload - Payload JWT tokenBerisi Data Transfer Objects untuk API calls:
CreateUserDto, UpdateUserDto - DTO untuk user operationsCreateEventDto, UpdateEventDto - DTO untuk event operationsCreateOrderDto - DTO untuk membuat pesananLoginDto - DTO untuk loginCreateSystemSettingDto, UpdateSystemSettingDto - DTO untuk pengaturan sistemCreateFeatureFlagDto, UpdateFeatureFlagDto - DTO untuk feature flagsCreateEmailTemplateDto, UpdateEmailTemplateDto - DTO untuk template emailEvaluateFeatureFlagDto - DTO untuk evaluasi feature flagRenderTemplateDto - DTO untuk render template emailBulkUpdateSettingsDto - DTO untuk update batch pengaturanSettingsExportDto, SettingsImportDto - DTO untuk export/import pengaturanBerisi konstanta dan konfigurasi:
API_ENDPOINTS - Endpoint API (termasuk settings endpoints)PAGINATION - Konfigurasi paginationVALIDATION - Aturan validasiSTATUS_COLORS - Warna untuk status (termasuk settings status colors)ERROR_MESSAGES - Pesan errorSUCCESS_MESSAGES - Pesan suksesDEFAULTS.SETTINGS - Default values untuk pengaturan sistemDEFAULTS.FEATURE_FLAG - Default values untuk feature flagsDEFAULTS.EMAIL_TEMPLATE - Default values untuk template emailFEATURES - Feature toggles (termasuk settings features)Selalu gunakan types yang sudah didefinisikan daripada membuat type baru:
// âś… Good
import { User } from './scripts/frontend/types';
const user: User = { ... };
// ❌ Bad
interface MyUser {
id: string;
name: string;
// ...
}
Gunakan DTO types untuk validasi form:
import { CreateEventDto } from './scripts/frontend/types';
const validateForm = (data: Partial<CreateEventDto>): boolean => {
// Validation logic
};
Gunakan generic types untuk response handling:
import { ApiResponse, PaginatedResult, Event } from './scripts/frontend/types';
const fetchEvents = async (): Promise<ApiResponse<PaginatedResult<Event>>> => {
// API call
};
Gunakan enum values daripada string literals:
import { UserRole } from './scripts/frontend/types';
// âś… Good
if (user.role === UserRole.ADMIN) { ... }
// ❌ Bad
if (user.role === 'admin') { ... }
File-file ini harus diupdate setiap kali ada perubahan struktur data di backend:
import React from 'react';
import { Event, EventStatus } from './scripts/frontend/types';
interface EventListProps {
events: Event[];
onStatusChange: (id: string, status: EventStatus) => void;
}
const EventList: React.FC<EventListProps> = ({ events, onStatusChange }) => {
// Component implementation
};
import { defineComponent, PropType } from 'vue';
import { Event } from './scripts/frontend/types';
export default defineComponent({
props: {
event: {
type: Object as PropType<Event>,
required: true
}
},
// Component implementation
});
import { Component, Input } from '@angular/core';
import { Event } from './scripts/frontend/types';
@Component({
selector: 'app-event-card',
templateUrl: './event-card.component.html'
})
export class EventCardComponent {
@Input() event!: Event;
}
// Type checking
const user: User = {
// TypeScript akan memberikan error jika ada field yang hilang
};
// Runtime validation (optional)
const isValidUser = (obj: any): obj is User => {
return typeof obj.id === 'string' &&
typeof obj.username === 'string' &&
typeof obj.email === 'string';
};
Ketika menambah atau mengubah types:
FAQs
TypeScript type definitions for ticket system - microservices types with comprehensive settings management
We found that jsq-ticket-type demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authorities’ publishing activity, highlighting trends and transparency across the CVE ecosystem.

Product
Detect malware, unsafe data flows, and license issues in GitHub Actions with Socket’s new workflow scanning support.