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/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 {};