feat: add core type definitions (PageInfo, ApiResponse, WsEvent, FingerprintProfile)
This commit is contained in:
@@ -1,2 +1,10 @@
|
|||||||
// @visionl/core — placeholder, to be implemented in Task 2
|
export { type PageInfo } from './types/page.js';
|
||||||
export const VERSION = '0.1.0';
|
export { type ApiResponse, ErrorCode } from './types/api.js';
|
||||||
|
export { type WsEvent } from './types/ws.js';
|
||||||
|
export {
|
||||||
|
type FingerprintProfile,
|
||||||
|
type FingerprintPermissions,
|
||||||
|
type FingerprintBehavior,
|
||||||
|
type CanvasNoiseConfig,
|
||||||
|
type PermissionState,
|
||||||
|
} from './types/fingerprint.js';
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// API request/response types / API 请求响应类型
|
||||||
|
export interface ApiResponse<T = unknown> {
|
||||||
|
ok: boolean;
|
||||||
|
data?: T;
|
||||||
|
error?: {
|
||||||
|
code: ErrorCode;
|
||||||
|
message: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum ErrorCode {
|
||||||
|
PAGE_NOT_FOUND = 'PAGE_NOT_FOUND',
|
||||||
|
DAEMON_UNREACHABLE = 'DAEMON_UNREACHABLE',
|
||||||
|
INVALID_URL = 'INVALID_URL',
|
||||||
|
ALIAS_EXISTS = 'ALIAS_EXISTS',
|
||||||
|
TIMEOUT = 'TIMEOUT',
|
||||||
|
INTERNAL = 'INTERNAL',
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
// Fingerprint profile type definitions / 指纹配置类型定义
|
||||||
|
export type PermissionState = 'prompt' | 'granted' | 'denied';
|
||||||
|
|
||||||
|
export interface FingerprintPermissions {
|
||||||
|
notifications: PermissionState;
|
||||||
|
geolocation: PermissionState;
|
||||||
|
camera: PermissionState;
|
||||||
|
microphone: PermissionState;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CanvasNoiseConfig {
|
||||||
|
enabled: boolean;
|
||||||
|
strength: number; // 0-1 / 噪声强度 0-1
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FingerprintBehavior {
|
||||||
|
mouseMoveDelay: { min: number; max: number };
|
||||||
|
keyPressDelay: { min: number; max: number };
|
||||||
|
scrollStepDelay: { min: number; max: number };
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FingerprintProfile {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
userAgent: string;
|
||||||
|
platform: string;
|
||||||
|
languages: string[];
|
||||||
|
acceptLanguage: string;
|
||||||
|
screen: { width: number; height: number; colorDepth: number; pixelRatio: number };
|
||||||
|
viewport: { width: number; height: number };
|
||||||
|
webgl: { vendor: string; renderer: string };
|
||||||
|
timezone: string;
|
||||||
|
geolocation?: { latitude: number; longitude: number; accuracy: number };
|
||||||
|
permissions: FingerprintPermissions;
|
||||||
|
behavior: FingerprintBehavior;
|
||||||
|
canvasNoise: CanvasNoiseConfig;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// Page state type definitions / 页面状态类型定义
|
||||||
|
export interface PageInfo {
|
||||||
|
id: string;
|
||||||
|
url: string;
|
||||||
|
alias?: string;
|
||||||
|
title: string;
|
||||||
|
status: 'active' | 'crashed';
|
||||||
|
profile: string;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// WebSocket event type definitions / WebSocket 事件类型定义
|
||||||
|
import type { PageInfo } from './page.js';
|
||||||
|
|
||||||
|
export type WsEvent =
|
||||||
|
| { type: 'page:created'; data: PageInfo }
|
||||||
|
| { type: 'page:closed'; data: { id: string } }
|
||||||
|
| { type: 'page:navigated'; data: { id: string; url: string; title: string } }
|
||||||
|
| { type: 'page:crashed'; data: { id: string; error: string } }
|
||||||
|
| { type: 'page:console'; data: { id: string; level: string; text: string } }
|
||||||
|
| { type: 'page:detection:warning'; data: { id: string; level: string; detail: string } };
|
||||||
Reference in New Issue
Block a user