import type { ApplicationCloudSetting } from '@/core/setting.ts'; import type { UserBasicInfo } from './user.ts'; export const TOKEN_TYPE_API: number = 8; export const TOKEN_TYPE_MCP: number = 5; export interface TokenGenerateAPIRequest { readonly expiresInSeconds: number; readonly password: string; } export interface TokenGenerateMCPRequest { readonly expiresInSeconds: number; readonly password: string; } export interface TokenRevokeRequest { readonly tokenId: string; } export interface TokenGenerateAPIResponse { readonly token: string; readonly apiBaseUrl: string; } export interface TokenGenerateMCPResponse { readonly token: string; readonly mcpUrl: string; } export interface TokenRefreshResponse { readonly newToken?: string; readonly oldTokenId?: string; readonly user: UserBasicInfo; readonly applicationCloudSettings?: ApplicationCloudSetting[]; readonly notificationContent?: string; } export interface TokenInfoResponse { readonly tokenId: string; readonly tokenType: number; readonly userAgent: string; readonly lastSeen: number; readonly isCurrent: boolean; } export enum SessionDeviceType { Api = 'api', MCP = 'mcp', Phone = 'phone', Tablet = 'tablet', TV = 'tv', Wearable = 'wearable', Default = 'default' } export class SessionInfo { public readonly tokenId: string; public readonly isCurrent: boolean; public readonly deviceType: SessionDeviceType; public readonly deviceInfo: string; public readonly deviceName: string; public readonly lastSeen: number; protected constructor(tokenId: string, isCurrent: boolean, deviceType: SessionDeviceType, deviceInfo: string, deviceName: string, lastSeen: number) { this.tokenId = tokenId; this.isCurrent = isCurrent; this.deviceType = deviceType; this.deviceInfo = deviceInfo; this.deviceName = deviceName; this.lastSeen = lastSeen; } public static of(tokenId: string, isCurrent: boolean, deviceType: SessionDeviceType, deviceInfo: string, deviceName: string, lastSeen: number): SessionInfo { return new SessionInfo(tokenId, isCurrent, deviceType, deviceInfo, deviceName, lastSeen); } }