egos-transfer 0.0.8
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.
- package/.lintstagedrc.json +3 -0
- package/.prettierrc +7 -0
- package/.watchmanconfig +6 -0
- package/README.md +343 -0
- package/dist/constant.d.ts +13 -0
- package/dist/constant.js +16 -0
- package/dist/entity.d.ts +159 -0
- package/dist/entity.js +164 -0
- package/dist/file-transfer.d.ts +81 -0
- package/dist/file-transfer.js +476 -0
- package/dist/handler.d.ts +42 -0
- package/dist/handler.js +369 -0
- package/dist/helper.d.ts +2 -0
- package/dist/helper.js +12 -0
- package/dist/http-transfer.d.ts +46 -0
- package/dist/http-transfer.js +243 -0
- package/dist/http-transformer.d.ts +3 -0
- package/dist/http-transformer.js +20 -0
- package/dist/index.d.ts +95 -0
- package/dist/index.js +665 -0
- package/dist/interfaces.d.ts +362 -0
- package/dist/interfaces.js +2 -0
- package/dist/locker.d.ts +115 -0
- package/dist/locker.js +245 -0
- package/dist/router.d.ts +62 -0
- package/dist/router.js +191 -0
- package/dist/server.d.ts +29 -0
- package/dist/server.js +77 -0
- package/dist/utils.d.ts +92 -0
- package/dist/utils.js +333 -0
- package/package.json +42 -0
- package/src/constant.ts +14 -0
- package/src/entity.ts +201 -0
- package/src/file-transfer.ts +517 -0
- package/src/handler.ts +413 -0
- package/src/helper.ts +8 -0
- package/src/http-transfer.ts +261 -0
- package/src/http-transformer.ts +20 -0
- package/src/index.ts +732 -0
- package/src/interfaces.ts +420 -0
- package/src/locker.ts +322 -0
- package/src/router.ts +243 -0
- package/src/server.ts +83 -0
- package/src/utils.ts +386 -0
- package/tsconfig.json +28 -0
package/dist/entity.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransferErrorCode = exports.REQUEST_TIMEOUT = exports.MessageType = exports.ShareApiList = exports.PeerApiList = exports.PeerShareRoutes = exports.PeerRoutes = exports.NetworkQuality = exports.TransferPriority = exports.PeerAction = exports.PeerScope = exports.MessageStatus = exports.TRANSFER_CONSTANTS = exports.FILE_CHUNK_SIZE = exports.READY_STATE = void 0;
|
|
4
|
+
var READY_STATE;
|
|
5
|
+
(function (READY_STATE) {
|
|
6
|
+
READY_STATE[READY_STATE["CONNECTING_STATE"] = 0] = "CONNECTING_STATE";
|
|
7
|
+
READY_STATE[READY_STATE["OPEN_STATE"] = 1] = "OPEN_STATE";
|
|
8
|
+
READY_STATE[READY_STATE["CLOSING_STATE"] = 2] = "CLOSING_STATE";
|
|
9
|
+
READY_STATE[READY_STATE["CLOSED_STATE"] = 3] = "CLOSED_STATE";
|
|
10
|
+
})(READY_STATE || (exports.READY_STATE = READY_STATE = {}));
|
|
11
|
+
exports.FILE_CHUNK_SIZE = 1024 * 1024 * 2;
|
|
12
|
+
// Awesome: Enhanced file transfer constants
|
|
13
|
+
exports.TRANSFER_CONSTANTS = {
|
|
14
|
+
DEFAULT_CHUNK_SIZE: 1024 * 1024 * 2, // 16KB
|
|
15
|
+
MAX_CHUNK_SIZE: 2 * 1024 * 1024, // 5MB
|
|
16
|
+
MIN_CHUNK_SIZE: 64 * 1024, // 64KB
|
|
17
|
+
MAX_CONCURRENT_CHUNKS: 5,
|
|
18
|
+
DEFAULT_RETRY_ATTEMPTS: 3,
|
|
19
|
+
HEARTBEAT_INTERVAL: 30000, // 30s
|
|
20
|
+
CONNECTION_TIMEOUT: 10000, // 10s
|
|
21
|
+
TRANSFER_TIMEOUT: 300000, // 5min
|
|
22
|
+
};
|
|
23
|
+
var MessageStatus;
|
|
24
|
+
(function (MessageStatus) {
|
|
25
|
+
MessageStatus["INITIALIZE"] = "initialize";
|
|
26
|
+
MessageStatus["PROCESSING"] = "processing";
|
|
27
|
+
MessageStatus["DONE"] = "done";
|
|
28
|
+
MessageStatus["FAILED"] = "failed";
|
|
29
|
+
MessageStatus["PAUSED"] = "paused";
|
|
30
|
+
MessageStatus["CANCELLED"] = "cancelled";
|
|
31
|
+
MessageStatus["TIMEOUT"] = "timeout";
|
|
32
|
+
MessageStatus["QUEUED"] = "queued";
|
|
33
|
+
MessageStatus["RESUMING"] = "resuming";
|
|
34
|
+
MessageStatus["VERIFYING"] = "verifying";
|
|
35
|
+
})(MessageStatus || (exports.MessageStatus = MessageStatus = {}));
|
|
36
|
+
var PeerScope;
|
|
37
|
+
(function (PeerScope) {
|
|
38
|
+
PeerScope["RESPONSE"] = "RESPONSE";
|
|
39
|
+
PeerScope["REQUEST"] = "REQUEST";
|
|
40
|
+
})(PeerScope || (exports.PeerScope = PeerScope = {}));
|
|
41
|
+
var PeerAction;
|
|
42
|
+
(function (PeerAction) {
|
|
43
|
+
PeerAction["SEND"] = "send";
|
|
44
|
+
PeerAction["RECEIVE"] = "receive";
|
|
45
|
+
PeerAction["DOWNLOAD"] = "download";
|
|
46
|
+
PeerAction["UPLOAD"] = "upload";
|
|
47
|
+
PeerAction["UPLOAD_RECEIVE"] = "upload@receive";
|
|
48
|
+
PeerAction["SYNC"] = "sync";
|
|
49
|
+
PeerAction["BACKUP"] = "backup";
|
|
50
|
+
})(PeerAction || (exports.PeerAction = PeerAction = {}));
|
|
51
|
+
// Awesome: Enhanced transfer priorities
|
|
52
|
+
var TransferPriority;
|
|
53
|
+
(function (TransferPriority) {
|
|
54
|
+
TransferPriority[TransferPriority["LOW"] = 1] = "LOW";
|
|
55
|
+
TransferPriority[TransferPriority["NORMAL"] = 2] = "NORMAL";
|
|
56
|
+
TransferPriority[TransferPriority["HIGH"] = 3] = "HIGH";
|
|
57
|
+
TransferPriority[TransferPriority["URGENT"] = 4] = "URGENT";
|
|
58
|
+
})(TransferPriority || (exports.TransferPriority = TransferPriority = {}));
|
|
59
|
+
// Awesome: Network quality levels
|
|
60
|
+
var NetworkQuality;
|
|
61
|
+
(function (NetworkQuality) {
|
|
62
|
+
NetworkQuality["POOR"] = "poor";
|
|
63
|
+
NetworkQuality["FAIR"] = "fair";
|
|
64
|
+
NetworkQuality["GOOD"] = "good";
|
|
65
|
+
NetworkQuality["EXCELLENT"] = "excellent";
|
|
66
|
+
})(NetworkQuality || (exports.NetworkQuality = NetworkQuality = {}));
|
|
67
|
+
var PeerRoutes;
|
|
68
|
+
(function (PeerRoutes) {
|
|
69
|
+
PeerRoutes["MESSAGE"] = "/messages";
|
|
70
|
+
PeerRoutes["FILES"] = "/files";
|
|
71
|
+
PeerRoutes["CONTENT"] = "/files/content";
|
|
72
|
+
PeerRoutes["FILE_TRANSFER_START"] = "/files/transfer/start";
|
|
73
|
+
PeerRoutes["FILE_TRANSFER_META"] = "/files/transfer/meta";
|
|
74
|
+
PeerRoutes["MULTIPART"] = "/files/transfer/multipart";
|
|
75
|
+
PeerRoutes["FILE_TRANSFER_CHUNK"] = "/files/transfer/chunk";
|
|
76
|
+
PeerRoutes["FILE_TRANSFER_PAUSE"] = "/files/transfer/pause";
|
|
77
|
+
PeerRoutes["FILE_TRANSFER_RESUME"] = "/files/transfer/resume";
|
|
78
|
+
PeerRoutes["FILE_TRANSFER_CANCEL"] = "/files/transfer/cancel";
|
|
79
|
+
PeerRoutes["FILE_TRANSFER_COMPLETE"] = "/files/transfer/complete";
|
|
80
|
+
PeerRoutes["FILE_TRANSFER_FAILURE"] = "/files/transfer/failure";
|
|
81
|
+
PeerRoutes["INTERNAL_API_TOKEN"] = "/device/auth";
|
|
82
|
+
PeerRoutes["HEARTBEAT"] = "/heartbeat";
|
|
83
|
+
PeerRoutes["DISCOVER"] = "/discover";
|
|
84
|
+
PeerRoutes["FILE_MESSAGE"] = "/files/messages";
|
|
85
|
+
PeerRoutes["FILE_PREVIEW"] = "/files/preview";
|
|
86
|
+
PeerRoutes["FILE_SHARE_PREVIEW"] = "/files/share/preview";
|
|
87
|
+
// Awesome: New enhanced routes
|
|
88
|
+
PeerRoutes["DELETE_FILES"] = "/files/delete";
|
|
89
|
+
PeerRoutes["DEVICE_DISCOVER"] = "/devices/discover";
|
|
90
|
+
PeerRoutes["TRANSFER_PROGRESS"] = "/transfer/progress";
|
|
91
|
+
PeerRoutes["TRANSFER_PAUSE"] = "/transfer/pause";
|
|
92
|
+
PeerRoutes["TRANSFER_RESUME"] = "/transfer/resume";
|
|
93
|
+
PeerRoutes["TRANSFER_CANCEL"] = "/transfer/cancel";
|
|
94
|
+
PeerRoutes["NETWORK_STATUS"] = "/network/status";
|
|
95
|
+
PeerRoutes["DEVICE_INFO"] = "/device/info";
|
|
96
|
+
PeerRoutes["BATCH_TRANSFER"] = "/files/batch/transfer";
|
|
97
|
+
PeerRoutes["TRANSFER_QUEUE"] = "/transfer/queue";
|
|
98
|
+
PeerRoutes["FILE_SYNC"] = "/files/sync";
|
|
99
|
+
PeerRoutes["BACKUP_STATUS"] = "/backup/status";
|
|
100
|
+
})(PeerRoutes || (exports.PeerRoutes = PeerRoutes = {}));
|
|
101
|
+
exports.PeerShareRoutes = {
|
|
102
|
+
sharePreview: '/shares/preview',
|
|
103
|
+
shareFileList: '/shares/files',
|
|
104
|
+
shareFileMeta: '/shares/files/meta',
|
|
105
|
+
shareFileChunk: '/shares/files/chunk',
|
|
106
|
+
shareFilePreview: '/shares/files/preview',
|
|
107
|
+
shareFileTransitStart: '/shares/files/transmit/start',
|
|
108
|
+
sharePasswordVerify: '/shares/password/verify',
|
|
109
|
+
shareUploadStart: '/shares/upload/start',
|
|
110
|
+
shareUploadChunk: '/shares/upload/chunk',
|
|
111
|
+
shareUploadedFiles: '/shares/uploaded/files',
|
|
112
|
+
shareUploadComplete: '/shares/upload/complete',
|
|
113
|
+
// Awesome: Enhanced share routes
|
|
114
|
+
shareBatchDownload: '/shares/batch/download',
|
|
115
|
+
shareProgress: '/shares/progress',
|
|
116
|
+
shareCancel: '/shares/cancel',
|
|
117
|
+
};
|
|
118
|
+
exports.PeerApiList = [
|
|
119
|
+
PeerRoutes.MESSAGE,
|
|
120
|
+
PeerRoutes.FILE_MESSAGE,
|
|
121
|
+
PeerRoutes.FILE_PREVIEW,
|
|
122
|
+
PeerRoutes.FILE_TRANSFER_CHUNK,
|
|
123
|
+
PeerRoutes.FILE_TRANSFER_META,
|
|
124
|
+
PeerRoutes.FILE_TRANSFER_PAUSE,
|
|
125
|
+
PeerRoutes.FILE_TRANSFER_RESUME,
|
|
126
|
+
PeerRoutes.FILE_TRANSFER_CANCEL,
|
|
127
|
+
PeerRoutes.FILE_TRANSFER_COMPLETE,
|
|
128
|
+
PeerRoutes.FILE_TRANSFER_FAILURE,
|
|
129
|
+
];
|
|
130
|
+
exports.ShareApiList = [
|
|
131
|
+
exports.PeerShareRoutes.sharePreview,
|
|
132
|
+
exports.PeerShareRoutes.shareFileList,
|
|
133
|
+
exports.PeerShareRoutes.shareFileMeta,
|
|
134
|
+
exports.PeerShareRoutes.shareFileChunk,
|
|
135
|
+
exports.PeerShareRoutes.shareFilePreview,
|
|
136
|
+
exports.PeerShareRoutes.sharePasswordVerify,
|
|
137
|
+
exports.PeerShareRoutes.shareBatchDownload,
|
|
138
|
+
];
|
|
139
|
+
var MessageType;
|
|
140
|
+
(function (MessageType) {
|
|
141
|
+
MessageType["FILE"] = "file";
|
|
142
|
+
MessageType["TEXT"] = "text";
|
|
143
|
+
MessageType["REQUEST"] = "request";
|
|
144
|
+
// Awesome: New message types
|
|
145
|
+
MessageType["PROGRESS"] = "progress";
|
|
146
|
+
MessageType["STATUS"] = "status";
|
|
147
|
+
MessageType["COMMAND"] = "command";
|
|
148
|
+
MessageType["NOTIFICATION"] = "notification";
|
|
149
|
+
MessageType["HEARTBEAT"] = "heartbeat";
|
|
150
|
+
MessageType["ERROR"] = "error";
|
|
151
|
+
})(MessageType || (exports.MessageType = MessageType = {}));
|
|
152
|
+
exports.REQUEST_TIMEOUT = 18000;
|
|
153
|
+
// Awesome: Enhanced error types
|
|
154
|
+
var TransferErrorCode;
|
|
155
|
+
(function (TransferErrorCode) {
|
|
156
|
+
TransferErrorCode["NETWORK_TIMEOUT"] = "NETWORK_TIMEOUT";
|
|
157
|
+
TransferErrorCode["INSUFFICIENT_SPACE"] = "INSUFFICIENT_SPACE";
|
|
158
|
+
TransferErrorCode["FILE_NOT_FOUND"] = "FILE_NOT_FOUND";
|
|
159
|
+
TransferErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
|
|
160
|
+
TransferErrorCode["CHECKSUM_MISMATCH"] = "CHECKSUM_MISMATCH";
|
|
161
|
+
TransferErrorCode["DEVICE_OFFLINE"] = "DEVICE_OFFLINE";
|
|
162
|
+
TransferErrorCode["QUOTA_EXCEEDED"] = "QUOTA_EXCEEDED";
|
|
163
|
+
TransferErrorCode["UNSUPPORTED_FORMAT"] = "UNSUPPORTED_FORMAT";
|
|
164
|
+
})(TransferErrorCode || (exports.TransferErrorCode = TransferErrorCode = {}));
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { MessageTaskEntity, MetaData, PeerRequestPayload, TransferPrepareData, TransferProgress } from './interfaces';
|
|
2
|
+
export type TransferWroteOptions = {
|
|
3
|
+
transId: number | string;
|
|
4
|
+
data: Uint8Array;
|
|
5
|
+
position: number;
|
|
6
|
+
chunkNumber: number;
|
|
7
|
+
processed: (number | undefined)[];
|
|
8
|
+
totalChunk: number;
|
|
9
|
+
parent?: {
|
|
10
|
+
parentId: number | string;
|
|
11
|
+
path: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export interface TaskService {
|
|
15
|
+
registerTask: (data: Omit<MessageTaskEntity, 'id'>) => Promise<MessageTaskEntity>;
|
|
16
|
+
getTaskByTransId: (transId: string) => Promise<MessageTaskEntity | undefined>;
|
|
17
|
+
updateTask: (transId: number | string, changed: Partial<MessageTaskEntity>) => Promise<MessageTaskEntity | undefined>;
|
|
18
|
+
write: (data: TransferWroteOptions) => Promise<boolean>;
|
|
19
|
+
verifyFile: (transId: number | string) => Promise<boolean>;
|
|
20
|
+
complete(transId: string): Promise<boolean>;
|
|
21
|
+
getCacheFilename(meta: MetaData, transId?: string): Promise<string>;
|
|
22
|
+
updateTaskProcess(transId: string, processed: number[]): Promise<void>;
|
|
23
|
+
enqueue(transId: string): void;
|
|
24
|
+
onProgress?: (transId: string, progress: TransferProgress) => void;
|
|
25
|
+
}
|
|
26
|
+
type RequestFn = (peerId: string, payload: PeerRequestPayload) => Promise<any>;
|
|
27
|
+
export declare class FileTransfer {
|
|
28
|
+
protected chunkSize: number;
|
|
29
|
+
protected taskService: TaskService;
|
|
30
|
+
protected peerRequest: RequestFn | undefined;
|
|
31
|
+
protected progressCallbacks: Map<string, (progress: TransferProgress) => void>;
|
|
32
|
+
protected transferStats: Map<string, {
|
|
33
|
+
startTime: number;
|
|
34
|
+
lastUpdate: number;
|
|
35
|
+
bytesTransferred: number;
|
|
36
|
+
}>;
|
|
37
|
+
protected maxRetries: number;
|
|
38
|
+
protected adaptiveConcurrency: boolean;
|
|
39
|
+
protected maxConcurrentChunks: number;
|
|
40
|
+
constructor(taskService: TaskService);
|
|
41
|
+
getTaskService(): TaskService;
|
|
42
|
+
setRequest(req: RequestFn): void;
|
|
43
|
+
request(peerId: string, payload: PeerRequestPayload): Promise<any>;
|
|
44
|
+
onTransferProgress(transId: string, callback: (progress: TransferProgress) => void): void;
|
|
45
|
+
offTransferProgress(transId: string): void;
|
|
46
|
+
getTransferProgress(transId: string): Promise<TransferProgress | null>;
|
|
47
|
+
private updateProgress;
|
|
48
|
+
private retryWithBackoff;
|
|
49
|
+
private getOptimalConcurrency;
|
|
50
|
+
registerTask(data: Omit<MessageTaskEntity, 'id'>): Promise<MessageTaskEntity>;
|
|
51
|
+
/**
|
|
52
|
+
* start pull remote file
|
|
53
|
+
* @param peerId
|
|
54
|
+
* @param message
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
prepare(peerId: string, payload: TransferPrepareData, execute?: boolean): Promise<boolean>;
|
|
58
|
+
start(transId: string, retry?: number): any;
|
|
59
|
+
fetchFileChunk(task: MessageTaskEntity, payload: {
|
|
60
|
+
chunkIndex: number;
|
|
61
|
+
totalChunk: number;
|
|
62
|
+
transId: string;
|
|
63
|
+
}): Promise<any>;
|
|
64
|
+
getTask(transId: string): Promise<MessageTaskEntity>;
|
|
65
|
+
updateTask(transId: number | string, changed: Partial<MessageTaskEntity>): Promise<boolean>;
|
|
66
|
+
done(task: MessageTaskEntity): Promise<void>;
|
|
67
|
+
pauseTransfer(transId: string): Promise<boolean>;
|
|
68
|
+
resumeTransfer(transId: string): Promise<boolean>;
|
|
69
|
+
cancelTransfer(transId: string): Promise<boolean>;
|
|
70
|
+
getTransferStats(transId: string): {
|
|
71
|
+
startTime: number;
|
|
72
|
+
lastUpdate: number;
|
|
73
|
+
bytesTransferred: number;
|
|
74
|
+
};
|
|
75
|
+
setAdaptiveConcurrency(enabled: boolean, maxChunks?: number): void;
|
|
76
|
+
setRetrySettings(maxRetries: number): void;
|
|
77
|
+
getActiveTransfers(): Promise<string[]>;
|
|
78
|
+
formatSpeed(bytesPerSecond: number): string;
|
|
79
|
+
formatTimeRemaining(seconds: number): string;
|
|
80
|
+
}
|
|
81
|
+
export {};
|