@cjwddz/mirror 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cli/cli-commands.d.ts.map +1 -1
  2. package/dist/cli/cli-commands.js +83 -88
  3. package/dist/cli/cli-commands.js.map +1 -1
  4. package/dist/cli/index.d.ts +1 -1
  5. package/dist/cli/index.js +18 -60
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/core/http-tunnel-server.d.ts.map +1 -1
  8. package/dist/core/http-tunnel-server.js +4 -4
  9. package/dist/core/http-tunnel-server.js.map +1 -1
  10. package/dist/core/rule-manager.d.ts.map +1 -1
  11. package/dist/core/rule-manager.js +4 -6
  12. package/dist/core/rule-manager.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/core/file-sync.d.ts +0 -14
  15. package/dist/core/file-sync.d.ts.map +0 -1
  16. package/dist/core/file-sync.js +0 -34
  17. package/dist/core/file-sync.js.map +0 -1
  18. package/dist/core/output-buffer.d.ts +0 -42
  19. package/dist/core/output-buffer.d.ts.map +0 -1
  20. package/dist/core/output-buffer.js +0 -66
  21. package/dist/core/output-buffer.js.map +0 -1
  22. package/dist/core/protocol.d.ts +0 -83
  23. package/dist/core/protocol.d.ts.map +0 -1
  24. package/dist/core/protocol.js +0 -10
  25. package/dist/core/protocol.js.map +0 -1
  26. package/dist/core/state-machine.d.ts +0 -19
  27. package/dist/core/state-machine.d.ts.map +0 -1
  28. package/dist/core/state-machine.js +0 -39
  29. package/dist/core/state-machine.js.map +0 -1
  30. package/dist/core/token-manager.d.ts +0 -29
  31. package/dist/core/token-manager.d.ts.map +0 -1
  32. package/dist/core/token-manager.js +0 -90
  33. package/dist/core/token-manager.js.map +0 -1
  34. package/dist/core/workspace.d.ts +0 -28
  35. package/dist/core/workspace.d.ts.map +0 -1
  36. package/dist/core/workspace.js +0 -186
  37. package/dist/core/workspace.js.map +0 -1
  38. package/dist/transport/websocket.d.ts +0 -22
  39. package/dist/transport/websocket.d.ts.map +0 -1
  40. package/dist/transport/websocket.js +0 -96
  41. package/dist/transport/websocket.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/core/token-manager.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Workspace 管理
3
- */
4
- export declare class Workspace {
5
- private path;
6
- private currentVersion;
7
- private metadataPath;
8
- private metadata;
9
- constructor(path: string, metadataDir?: string);
10
- static create(workspaceDir: string, createTemp?: boolean, clientId?: string | null, clientWorkspacePath?: string | null, metadataDir?: string): Promise<Workspace>;
11
- private loadMetadata;
12
- private saveMetadata;
13
- setClientInfo(clientId: string, workspacePath: string | null): Promise<void>;
14
- getClientId(): string | null;
15
- getWorkspacePath(): string | null;
16
- getOldFiles(): Record<string, string>;
17
- updateFileList(files: Record<string, string>): Promise<void>;
18
- getFileHash(path: string): string | undefined;
19
- hasFile(path: string, hash: string): boolean;
20
- getPath(): string;
21
- getCurrentVersion(): number;
22
- setVersion(version: number): void;
23
- writeFile(relativePath: string, content: Buffer): Promise<void>;
24
- deleteFile(relativePath: string): Promise<void>;
25
- cleanup(): Promise<void>;
26
- disconnect(): Promise<void>;
27
- }
28
- //# sourceMappingURL=workspace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;WAoBjC,MAAM,CACjB,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,OAAe,EAC3B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,mBAAmB,GAAE,MAAM,GAAG,IAAW,EACzC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,CAAC;YAmDP,YAAY;YAYZ,YAAY;IAMpB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAelF,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI/B,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAI5C,OAAO,IAAI,MAAM;IAIjB,iBAAiB,IAAI,MAAM;IAI3B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU3B,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAcxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}
@@ -1,186 +0,0 @@
1
- /**
2
- * Workspace 管理
3
- */
4
- import { mkdtemp, rm, readdir, readFile } from 'fs/promises';
5
- import { join } from 'path';
6
- import { writeFile, mkdir, unlink } from 'fs/promises';
7
- import { existsSync } from 'fs';
8
- import { createHash } from 'crypto';
9
- import { tmpdir } from 'os';
10
- export class Workspace {
11
- path;
12
- currentVersion = 0;
13
- metadataPath;
14
- metadata = null;
15
- constructor(path, metadataDir) {
16
- this.path = path;
17
- // 元数据文件保存在工作区目录之外,避免污染同步目录
18
- // 基于工作区路径生成唯一的元数据文件名
19
- const hash = createHash('sha256').update(path).digest('hex').substring(0, 16);
20
- if (metadataDir) {
21
- // 使用指定的元数据目录
22
- if (!existsSync(metadataDir)) {
23
- mkdir(metadataDir, { recursive: true }).catch(() => {
24
- // 如果创建失败,使用临时目录作为后备
25
- });
26
- }
27
- this.metadataPath = join(metadataDir, `.mirror-metadata-${hash}.json`);
28
- }
29
- else {
30
- // 后备方案:使用系统临时目录
31
- this.metadataPath = join(tmpdir(), `.mirror-metadata-${hash}.json`);
32
- }
33
- }
34
- static async create(workspaceDir, createTemp = false, clientId = null, clientWorkspacePath = null, metadataDir) {
35
- if (createTemp) {
36
- // 创建临时目录
37
- const workspacePath = await mkdtemp(join(workspaceDir, 'mirror-'));
38
- return new Workspace(workspacePath, metadataDir);
39
- }
40
- else {
41
- // 直接使用 workspaceDir,不需要子目录(服务端只支持单个客户端)
42
- const actualWorkspacePath = workspaceDir;
43
- // 检查目录是否存在
44
- if (!existsSync(actualWorkspacePath)) {
45
- await mkdir(actualWorkspacePath, { recursive: true });
46
- }
47
- const workspace = new Workspace(actualWorkspacePath, metadataDir);
48
- // 尝试加载元数据
49
- await workspace.loadMetadata();
50
- // 如果元数据存在且工作目录路径匹配,复用工作区
51
- if (workspace.metadata &&
52
- workspace.metadata.workspacePath === clientWorkspacePath &&
53
- workspace.metadata.clientId === clientId) {
54
- workspace.currentVersion = workspace.metadata.version;
55
- return workspace;
56
- }
57
- // 如果元数据存在但工作目录路径不匹配,说明是不同的工作目录,清理
58
- if (workspace.metadata && workspace.metadata.workspacePath !== clientWorkspacePath) {
59
- console.log(`检测到不同工作目录: 旧=${workspace.metadata.workspacePath}, 新=${clientWorkspacePath},清理工作区`);
60
- await workspace.cleanup();
61
- await mkdir(actualWorkspacePath, { recursive: true });
62
- workspace.metadata = null;
63
- }
64
- else if (!workspace.metadata) {
65
- // 没有元数据,检查目录是否为空
66
- const entries = await readdir(actualWorkspacePath);
67
- if (entries.length > 0) {
68
- // 目录不为空,清理(可能是旧数据)
69
- await workspace.cleanup();
70
- await mkdir(actualWorkspacePath, { recursive: true });
71
- }
72
- }
73
- return workspace;
74
- }
75
- }
76
- async loadMetadata() {
77
- if (existsSync(this.metadataPath)) {
78
- try {
79
- const content = await readFile(this.metadataPath, 'utf-8');
80
- this.metadata = JSON.parse(content);
81
- }
82
- catch (error) {
83
- // 元数据文件损坏,忽略
84
- this.metadata = null;
85
- }
86
- }
87
- }
88
- async saveMetadata() {
89
- if (this.metadata) {
90
- await writeFile(this.metadataPath, JSON.stringify(this.metadata, null, 2), 'utf-8');
91
- }
92
- }
93
- async setClientInfo(clientId, workspacePath) {
94
- if (!this.metadata) {
95
- this.metadata = {
96
- clientId,
97
- workspacePath,
98
- version: 0,
99
- files: {},
100
- };
101
- }
102
- else {
103
- this.metadata.clientId = clientId;
104
- this.metadata.workspacePath = workspacePath;
105
- }
106
- await this.saveMetadata();
107
- }
108
- getClientId() {
109
- return this.metadata?.clientId || null;
110
- }
111
- getWorkspacePath() {
112
- return this.metadata?.workspacePath || null;
113
- }
114
- getOldFiles() {
115
- return this.metadata?.files || {};
116
- }
117
- async updateFileList(files) {
118
- if (!this.metadata) {
119
- this.metadata = {
120
- clientId: null,
121
- workspacePath: null,
122
- version: this.currentVersion,
123
- files,
124
- };
125
- }
126
- else {
127
- this.metadata.files = files;
128
- this.metadata.version = this.currentVersion;
129
- }
130
- await this.saveMetadata();
131
- }
132
- getFileHash(path) {
133
- return this.metadata?.files[path];
134
- }
135
- hasFile(path, hash) {
136
- return this.metadata?.files[path] === hash;
137
- }
138
- getPath() {
139
- return this.path;
140
- }
141
- getCurrentVersion() {
142
- return this.currentVersion;
143
- }
144
- setVersion(version) {
145
- this.currentVersion = version;
146
- if (this.metadata) {
147
- this.metadata.version = version;
148
- this.saveMetadata().catch(() => {
149
- // 忽略保存错误
150
- });
151
- }
152
- }
153
- async writeFile(relativePath, content) {
154
- const fullPath = join(this.path, relativePath);
155
- const dir = join(fullPath, '..');
156
- if (!existsSync(dir)) {
157
- await mkdir(dir, { recursive: true });
158
- }
159
- await writeFile(fullPath, content);
160
- }
161
- async deleteFile(relativePath) {
162
- const fullPath = join(this.path, relativePath);
163
- if (existsSync(fullPath)) {
164
- await unlink(fullPath);
165
- }
166
- }
167
- async cleanup() {
168
- try {
169
- // 清理工作区目录
170
- await rm(this.path, { recursive: true, force: true });
171
- // 清理元数据文件
172
- if (existsSync(this.metadataPath)) {
173
- await unlink(this.metadataPath);
174
- }
175
- this.metadata = null;
176
- }
177
- catch (error) {
178
- // 忽略清理错误
179
- }
180
- }
181
- async disconnect() {
182
- // 断开连接时保留工作区,只保存元数据
183
- await this.saveMetadata();
184
- }
185
- }
186
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * WebSocket 传输层
3
- */
4
- import { WebSocket, WebSocketServer } from 'ws';
5
- import type { Message } from '../core/protocol.js';
6
- export declare class WebSocketTransport {
7
- private ws;
8
- private server;
9
- private messageHandlers;
10
- private allMessageHandlers;
11
- private closeHandlers;
12
- createServer(port: number, onConnection: (ws: WebSocket) => void): Promise<WebSocketServer>;
13
- connect(url: string): Promise<WebSocket>;
14
- private setupMessageHandler;
15
- send(message: Message): void;
16
- onMessage(type: string, handler: (message: Message) => void): void;
17
- onAnyMessage(handler: (message: Message) => void): void;
18
- onClose(handler: () => void): void;
19
- getWebSocket(): WebSocket | null;
20
- close(): void;
21
- }
22
- //# sourceMappingURL=websocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,kBAAkB,CAAyC;IACnE,OAAO,CAAC,aAAa,CAAyB;IAG9C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB3F,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAcxC,OAAO,CAAC,mBAAmB;IA8B3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO5B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIlE,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIvD,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,YAAY,IAAI,SAAS,GAAG,IAAI;IAIhC,KAAK,IAAI,IAAI;CAad"}
@@ -1,96 +0,0 @@
1
- /**
2
- * WebSocket 传输层
3
- */
4
- import { WebSocket, WebSocketServer } from 'ws';
5
- export class WebSocketTransport {
6
- ws = null;
7
- server = null;
8
- messageHandlers = new Map();
9
- allMessageHandlers = [];
10
- closeHandlers = [];
11
- // Server side
12
- createServer(port, onConnection) {
13
- return new Promise((resolve, reject) => {
14
- const server = new WebSocketServer({ port }, () => {
15
- resolve(server);
16
- });
17
- server.on('error', reject);
18
- server.on('connection', (ws) => {
19
- this.setupMessageHandler(ws);
20
- onConnection(ws);
21
- });
22
- this.server = server;
23
- });
24
- }
25
- // Client side
26
- connect(url) {
27
- return new Promise((resolve, reject) => {
28
- const ws = new WebSocket(url);
29
- ws.on('open', () => {
30
- this.ws = ws;
31
- this.setupMessageHandler(ws);
32
- resolve(ws);
33
- });
34
- ws.on('error', reject);
35
- });
36
- }
37
- setupMessageHandler(ws) {
38
- ws.on('message', (data) => {
39
- try {
40
- // 正确处理 Buffer 和 string 类型的数据
41
- const messageStr = typeof data === 'string' ? data : data.toString('utf8');
42
- const message = JSON.parse(messageStr);
43
- // 调用特定类型的处理器
44
- const handler = this.messageHandlers.get(message.type);
45
- if (handler) {
46
- handler(message);
47
- }
48
- // 调用所有消息处理器
49
- for (const h of this.allMessageHandlers) {
50
- h(message);
51
- }
52
- }
53
- catch (error) {
54
- console.error('Failed to parse message:', error);
55
- }
56
- });
57
- ws.on('close', () => {
58
- // 调用所有关闭处理器
59
- for (const handler of this.closeHandlers) {
60
- handler();
61
- }
62
- });
63
- }
64
- send(message) {
65
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
66
- throw new Error('WebSocket is not connected');
67
- }
68
- this.ws.send(JSON.stringify(message));
69
- }
70
- onMessage(type, handler) {
71
- this.messageHandlers.set(type, handler);
72
- }
73
- onAnyMessage(handler) {
74
- this.allMessageHandlers.push(handler);
75
- }
76
- onClose(handler) {
77
- this.closeHandlers.push(handler);
78
- }
79
- getWebSocket() {
80
- return this.ws;
81
- }
82
- close() {
83
- if (this.ws) {
84
- this.ws.close();
85
- this.ws = null;
86
- }
87
- if (this.server) {
88
- this.server.close();
89
- this.server = null;
90
- }
91
- this.messageHandlers.clear();
92
- this.allMessageHandlers = [];
93
- this.closeHandlers = [];
94
- }
95
- }
96
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}