@chunkflowjs/upload-server 0.0.1-alpha.1
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/README.md +20 -0
- package/dist/database-adapter.d.ts +65 -0
- package/dist/database-adapter.d.ts.map +1 -0
- package/dist/index.cjs +537 -0
- package/dist/index.d.cts +166 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +166 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +536 -0
- package/dist/index.mjs.map +1 -0
- package/dist/local-storage-adapter.d.ts +20 -0
- package/dist/local-storage-adapter.d.ts.map +1 -0
- package/dist/memory-database-adapter.d.ts +25 -0
- package/dist/memory-database-adapter.d.ts.map +1 -0
- package/dist/storage-adapter.d.ts +12 -0
- package/dist/storage-adapter.d.ts.map +1 -0
- package/dist/upload-service.d.ts +41 -0
- package/dist/upload-service.d.ts.map +1 -0
- package/package.json +50 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Readable } from "stream";
|
|
2
|
+
import { CreateFileRequest, CreateFileResponse, MergeFileRequest, MergeFileResponse, UploadChunkRequest, UploadChunkResponse, VerifyHashRequest, VerifyHashResponse } from "@chunkflowjs/protocol";
|
|
3
|
+
|
|
4
|
+
//#region src/storage-adapter.d.ts
|
|
5
|
+
interface StorageAdapter {
|
|
6
|
+
saveChunk(chunkHash: string, data: Buffer): Promise<void>;
|
|
7
|
+
getChunk(chunkHash: string): Promise<Buffer | null>;
|
|
8
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
9
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
10
|
+
getChunkStream(chunkHash: string): Promise<Readable | null>;
|
|
11
|
+
deleteChunk(chunkHash: string): Promise<void>;
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
cleanup(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/local-storage-adapter.d.ts
|
|
17
|
+
interface LocalStorageAdapterOptions {
|
|
18
|
+
baseDir?: string;
|
|
19
|
+
}
|
|
20
|
+
declare class LocalStorageAdapter implements StorageAdapter {
|
|
21
|
+
private baseDir;
|
|
22
|
+
private initialized;
|
|
23
|
+
constructor(options?: LocalStorageAdapterOptions);
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
private getChunkPath;
|
|
26
|
+
saveChunk(chunkHash: string, data: Buffer): Promise<void>;
|
|
27
|
+
getChunk(chunkHash: string): Promise<Buffer | null>;
|
|
28
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
29
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
30
|
+
getChunkStream(chunkHash: string): Promise<Readable | null>;
|
|
31
|
+
deleteChunk(chunkHash: string): Promise<void>;
|
|
32
|
+
cleanup(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/database-adapter.d.ts
|
|
36
|
+
interface FileMetadata {
|
|
37
|
+
fileId: string;
|
|
38
|
+
filename: string;
|
|
39
|
+
size: number;
|
|
40
|
+
mimeType: string;
|
|
41
|
+
fileHash: string;
|
|
42
|
+
uploadToken: string;
|
|
43
|
+
chunkSize: number;
|
|
44
|
+
totalChunks: number;
|
|
45
|
+
uploadedChunks: number;
|
|
46
|
+
status: "pending" | "uploading" | "completed" | "failed";
|
|
47
|
+
createdAt: Date;
|
|
48
|
+
updatedAt: Date;
|
|
49
|
+
completedAt?: Date;
|
|
50
|
+
url?: string;
|
|
51
|
+
}
|
|
52
|
+
interface ChunkEntity {
|
|
53
|
+
chunkHash: string;
|
|
54
|
+
size: number;
|
|
55
|
+
refCount: number;
|
|
56
|
+
createdAt: Date;
|
|
57
|
+
}
|
|
58
|
+
interface FileChunkEntity {
|
|
59
|
+
fileId: string;
|
|
60
|
+
chunkHash: string;
|
|
61
|
+
chunkIndex: number;
|
|
62
|
+
createdAt: Date;
|
|
63
|
+
}
|
|
64
|
+
interface CreateFileOptions {
|
|
65
|
+
filename: string;
|
|
66
|
+
size: number;
|
|
67
|
+
mimeType: string;
|
|
68
|
+
fileHash: string;
|
|
69
|
+
uploadToken: string;
|
|
70
|
+
chunkSize: number;
|
|
71
|
+
totalChunks: number;
|
|
72
|
+
}
|
|
73
|
+
interface UpdateFileOptions {
|
|
74
|
+
uploadedChunks?: number;
|
|
75
|
+
status?: "pending" | "uploading" | "completed" | "failed";
|
|
76
|
+
completedAt?: Date;
|
|
77
|
+
url?: string;
|
|
78
|
+
fileHash?: string;
|
|
79
|
+
}
|
|
80
|
+
interface DatabaseAdapter {
|
|
81
|
+
initialize(): Promise<void>;
|
|
82
|
+
createFile(fileId: string, options: CreateFileOptions): Promise<FileMetadata>;
|
|
83
|
+
getFile(fileId: string): Promise<FileMetadata | null>;
|
|
84
|
+
getFileByHash(fileHash: string): Promise<FileMetadata | null>;
|
|
85
|
+
getFileByToken(uploadToken: string): Promise<FileMetadata | null>;
|
|
86
|
+
updateFile(fileId: string, options: UpdateFileOptions): Promise<FileMetadata>;
|
|
87
|
+
deleteFile(fileId: string): Promise<void>;
|
|
88
|
+
upsertChunk(chunkHash: string, size: number): Promise<ChunkEntity>;
|
|
89
|
+
getChunk(chunkHash: string): Promise<ChunkEntity | null>;
|
|
90
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
91
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
92
|
+
decrementChunkRef(chunkHash: string): Promise<void>;
|
|
93
|
+
createFileChunk(fileId: string, chunkHash: string, chunkIndex: number): Promise<FileChunkEntity>;
|
|
94
|
+
getFileChunks(fileId: string): Promise<FileChunkEntity[]>;
|
|
95
|
+
getFileChunkHashes(fileId: string): Promise<string[]>;
|
|
96
|
+
deleteFileChunks(fileId: string): Promise<void>;
|
|
97
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
98
|
+
cleanup(): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/memory-database-adapter.d.ts
|
|
102
|
+
declare class MemoryDatabaseAdapter implements DatabaseAdapter {
|
|
103
|
+
private files;
|
|
104
|
+
private chunks;
|
|
105
|
+
private fileChunks;
|
|
106
|
+
initialize(): Promise<void>;
|
|
107
|
+
createFile(fileId: string, options: CreateFileOptions): Promise<FileMetadata>;
|
|
108
|
+
getFile(fileId: string): Promise<FileMetadata | null>;
|
|
109
|
+
getFileByHash(fileHash: string): Promise<FileMetadata | null>;
|
|
110
|
+
getFileByToken(uploadToken: string): Promise<FileMetadata | null>;
|
|
111
|
+
updateFile(fileId: string, options: UpdateFileOptions): Promise<FileMetadata>;
|
|
112
|
+
deleteFile(fileId: string): Promise<void>;
|
|
113
|
+
upsertChunk(chunkHash: string, size: number): Promise<ChunkEntity>;
|
|
114
|
+
getChunk(chunkHash: string): Promise<ChunkEntity | null>;
|
|
115
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
116
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
117
|
+
decrementChunkRef(chunkHash: string): Promise<void>;
|
|
118
|
+
createFileChunk(fileId: string, chunkHash: string, chunkIndex: number): Promise<FileChunkEntity>;
|
|
119
|
+
getFileChunks(fileId: string): Promise<FileChunkEntity[]>;
|
|
120
|
+
getFileChunkHashes(fileId: string): Promise<string[]>;
|
|
121
|
+
deleteFileChunks(fileId: string): Promise<void>;
|
|
122
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
123
|
+
cleanup(): Promise<void>;
|
|
124
|
+
}
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/upload-service.d.ts
|
|
127
|
+
interface UploadServiceOptions {
|
|
128
|
+
storageAdapter: StorageAdapter;
|
|
129
|
+
databaseAdapter: DatabaseAdapter;
|
|
130
|
+
jwtSecret: string;
|
|
131
|
+
tokenExpiration?: number;
|
|
132
|
+
minChunkSize?: number;
|
|
133
|
+
maxChunkSize?: number;
|
|
134
|
+
defaultChunkSize?: number;
|
|
135
|
+
}
|
|
136
|
+
declare class UploadService {
|
|
137
|
+
private storageAdapter;
|
|
138
|
+
private databaseAdapter;
|
|
139
|
+
private jwtSecret;
|
|
140
|
+
private tokenExpiration;
|
|
141
|
+
private minChunkSize;
|
|
142
|
+
private maxChunkSize;
|
|
143
|
+
constructor(options: UploadServiceOptions);
|
|
144
|
+
initialize(): Promise<void>;
|
|
145
|
+
cleanup(): Promise<void>;
|
|
146
|
+
private generateFileId;
|
|
147
|
+
private generateUploadToken;
|
|
148
|
+
private verifyUploadToken;
|
|
149
|
+
private negotiateChunkSize;
|
|
150
|
+
createFile(request: CreateFileRequest): Promise<CreateFileResponse>;
|
|
151
|
+
verifyHash(request: VerifyHashRequest): Promise<VerifyHashResponse>;
|
|
152
|
+
uploadChunk(request: UploadChunkRequest): Promise<UploadChunkResponse>;
|
|
153
|
+
mergeFile(request: MergeFileRequest): Promise<MergeFileResponse>;
|
|
154
|
+
getFileMetadata(fileId: string): Promise<FileMetadata | null>;
|
|
155
|
+
getFileStream(fileId: string, range?: {
|
|
156
|
+
start: number;
|
|
157
|
+
end: number;
|
|
158
|
+
}): Promise<{
|
|
159
|
+
stream: NodeJS.ReadableStream;
|
|
160
|
+
size: number;
|
|
161
|
+
mimeType: string;
|
|
162
|
+
} | null>;
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
export { ChunkEntity, CreateFileOptions, DatabaseAdapter, FileChunkEntity, FileMetadata, LocalStorageAdapter, LocalStorageAdapterOptions, MemoryDatabaseAdapter, StorageAdapter, UpdateFileOptions, UploadService, UploadServiceOptions };
|
|
166
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/storage-adapter.ts","../src/local-storage-adapter.ts","../src/database-adapter.ts","../src/memory-database-adapter.ts","../src/upload-service.ts"],"mappings":"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"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Readable } from "stream";
|
|
2
|
+
import { CreateFileRequest, CreateFileResponse, MergeFileRequest, MergeFileResponse, UploadChunkRequest, UploadChunkResponse, VerifyHashRequest, VerifyHashResponse } from "@chunkflowjs/protocol";
|
|
3
|
+
|
|
4
|
+
//#region src/storage-adapter.d.ts
|
|
5
|
+
interface StorageAdapter {
|
|
6
|
+
saveChunk(chunkHash: string, data: Buffer): Promise<void>;
|
|
7
|
+
getChunk(chunkHash: string): Promise<Buffer | null>;
|
|
8
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
9
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
10
|
+
getChunkStream(chunkHash: string): Promise<Readable | null>;
|
|
11
|
+
deleteChunk(chunkHash: string): Promise<void>;
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
cleanup(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/local-storage-adapter.d.ts
|
|
17
|
+
interface LocalStorageAdapterOptions {
|
|
18
|
+
baseDir?: string;
|
|
19
|
+
}
|
|
20
|
+
declare class LocalStorageAdapter implements StorageAdapter {
|
|
21
|
+
private baseDir;
|
|
22
|
+
private initialized;
|
|
23
|
+
constructor(options?: LocalStorageAdapterOptions);
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
private getChunkPath;
|
|
26
|
+
saveChunk(chunkHash: string, data: Buffer): Promise<void>;
|
|
27
|
+
getChunk(chunkHash: string): Promise<Buffer | null>;
|
|
28
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
29
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
30
|
+
getChunkStream(chunkHash: string): Promise<Readable | null>;
|
|
31
|
+
deleteChunk(chunkHash: string): Promise<void>;
|
|
32
|
+
cleanup(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/database-adapter.d.ts
|
|
36
|
+
interface FileMetadata {
|
|
37
|
+
fileId: string;
|
|
38
|
+
filename: string;
|
|
39
|
+
size: number;
|
|
40
|
+
mimeType: string;
|
|
41
|
+
fileHash: string;
|
|
42
|
+
uploadToken: string;
|
|
43
|
+
chunkSize: number;
|
|
44
|
+
totalChunks: number;
|
|
45
|
+
uploadedChunks: number;
|
|
46
|
+
status: "pending" | "uploading" | "completed" | "failed";
|
|
47
|
+
createdAt: Date;
|
|
48
|
+
updatedAt: Date;
|
|
49
|
+
completedAt?: Date;
|
|
50
|
+
url?: string;
|
|
51
|
+
}
|
|
52
|
+
interface ChunkEntity {
|
|
53
|
+
chunkHash: string;
|
|
54
|
+
size: number;
|
|
55
|
+
refCount: number;
|
|
56
|
+
createdAt: Date;
|
|
57
|
+
}
|
|
58
|
+
interface FileChunkEntity {
|
|
59
|
+
fileId: string;
|
|
60
|
+
chunkHash: string;
|
|
61
|
+
chunkIndex: number;
|
|
62
|
+
createdAt: Date;
|
|
63
|
+
}
|
|
64
|
+
interface CreateFileOptions {
|
|
65
|
+
filename: string;
|
|
66
|
+
size: number;
|
|
67
|
+
mimeType: string;
|
|
68
|
+
fileHash: string;
|
|
69
|
+
uploadToken: string;
|
|
70
|
+
chunkSize: number;
|
|
71
|
+
totalChunks: number;
|
|
72
|
+
}
|
|
73
|
+
interface UpdateFileOptions {
|
|
74
|
+
uploadedChunks?: number;
|
|
75
|
+
status?: "pending" | "uploading" | "completed" | "failed";
|
|
76
|
+
completedAt?: Date;
|
|
77
|
+
url?: string;
|
|
78
|
+
fileHash?: string;
|
|
79
|
+
}
|
|
80
|
+
interface DatabaseAdapter {
|
|
81
|
+
initialize(): Promise<void>;
|
|
82
|
+
createFile(fileId: string, options: CreateFileOptions): Promise<FileMetadata>;
|
|
83
|
+
getFile(fileId: string): Promise<FileMetadata | null>;
|
|
84
|
+
getFileByHash(fileHash: string): Promise<FileMetadata | null>;
|
|
85
|
+
getFileByToken(uploadToken: string): Promise<FileMetadata | null>;
|
|
86
|
+
updateFile(fileId: string, options: UpdateFileOptions): Promise<FileMetadata>;
|
|
87
|
+
deleteFile(fileId: string): Promise<void>;
|
|
88
|
+
upsertChunk(chunkHash: string, size: number): Promise<ChunkEntity>;
|
|
89
|
+
getChunk(chunkHash: string): Promise<ChunkEntity | null>;
|
|
90
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
91
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
92
|
+
decrementChunkRef(chunkHash: string): Promise<void>;
|
|
93
|
+
createFileChunk(fileId: string, chunkHash: string, chunkIndex: number): Promise<FileChunkEntity>;
|
|
94
|
+
getFileChunks(fileId: string): Promise<FileChunkEntity[]>;
|
|
95
|
+
getFileChunkHashes(fileId: string): Promise<string[]>;
|
|
96
|
+
deleteFileChunks(fileId: string): Promise<void>;
|
|
97
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
98
|
+
cleanup(): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/memory-database-adapter.d.ts
|
|
102
|
+
declare class MemoryDatabaseAdapter implements DatabaseAdapter {
|
|
103
|
+
private files;
|
|
104
|
+
private chunks;
|
|
105
|
+
private fileChunks;
|
|
106
|
+
initialize(): Promise<void>;
|
|
107
|
+
createFile(fileId: string, options: CreateFileOptions): Promise<FileMetadata>;
|
|
108
|
+
getFile(fileId: string): Promise<FileMetadata | null>;
|
|
109
|
+
getFileByHash(fileHash: string): Promise<FileMetadata | null>;
|
|
110
|
+
getFileByToken(uploadToken: string): Promise<FileMetadata | null>;
|
|
111
|
+
updateFile(fileId: string, options: UpdateFileOptions): Promise<FileMetadata>;
|
|
112
|
+
deleteFile(fileId: string): Promise<void>;
|
|
113
|
+
upsertChunk(chunkHash: string, size: number): Promise<ChunkEntity>;
|
|
114
|
+
getChunk(chunkHash: string): Promise<ChunkEntity | null>;
|
|
115
|
+
chunkExists(chunkHash: string): Promise<boolean>;
|
|
116
|
+
chunksExist(chunkHashes: string[]): Promise<boolean[]>;
|
|
117
|
+
decrementChunkRef(chunkHash: string): Promise<void>;
|
|
118
|
+
createFileChunk(fileId: string, chunkHash: string, chunkIndex: number): Promise<FileChunkEntity>;
|
|
119
|
+
getFileChunks(fileId: string): Promise<FileChunkEntity[]>;
|
|
120
|
+
getFileChunkHashes(fileId: string): Promise<string[]>;
|
|
121
|
+
deleteFileChunks(fileId: string): Promise<void>;
|
|
122
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
123
|
+
cleanup(): Promise<void>;
|
|
124
|
+
}
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/upload-service.d.ts
|
|
127
|
+
interface UploadServiceOptions {
|
|
128
|
+
storageAdapter: StorageAdapter;
|
|
129
|
+
databaseAdapter: DatabaseAdapter;
|
|
130
|
+
jwtSecret: string;
|
|
131
|
+
tokenExpiration?: number;
|
|
132
|
+
minChunkSize?: number;
|
|
133
|
+
maxChunkSize?: number;
|
|
134
|
+
defaultChunkSize?: number;
|
|
135
|
+
}
|
|
136
|
+
declare class UploadService {
|
|
137
|
+
private storageAdapter;
|
|
138
|
+
private databaseAdapter;
|
|
139
|
+
private jwtSecret;
|
|
140
|
+
private tokenExpiration;
|
|
141
|
+
private minChunkSize;
|
|
142
|
+
private maxChunkSize;
|
|
143
|
+
constructor(options: UploadServiceOptions);
|
|
144
|
+
initialize(): Promise<void>;
|
|
145
|
+
cleanup(): Promise<void>;
|
|
146
|
+
private generateFileId;
|
|
147
|
+
private generateUploadToken;
|
|
148
|
+
private verifyUploadToken;
|
|
149
|
+
private negotiateChunkSize;
|
|
150
|
+
createFile(request: CreateFileRequest): Promise<CreateFileResponse>;
|
|
151
|
+
verifyHash(request: VerifyHashRequest): Promise<VerifyHashResponse>;
|
|
152
|
+
uploadChunk(request: UploadChunkRequest): Promise<UploadChunkResponse>;
|
|
153
|
+
mergeFile(request: MergeFileRequest): Promise<MergeFileResponse>;
|
|
154
|
+
getFileMetadata(fileId: string): Promise<FileMetadata | null>;
|
|
155
|
+
getFileStream(fileId: string, range?: {
|
|
156
|
+
start: number;
|
|
157
|
+
end: number;
|
|
158
|
+
}): Promise<{
|
|
159
|
+
stream: NodeJS.ReadableStream;
|
|
160
|
+
size: number;
|
|
161
|
+
mimeType: string;
|
|
162
|
+
} | null>;
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
export { ChunkEntity, CreateFileOptions, DatabaseAdapter, FileChunkEntity, FileMetadata, LocalStorageAdapter, LocalStorageAdapterOptions, MemoryDatabaseAdapter, StorageAdapter, UpdateFileOptions, UploadService, UploadServiceOptions };
|
|
166
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/storage-adapter.ts","../src/local-storage-adapter.ts","../src/database-adapter.ts","../src/memory-database-adapter.ts","../src/upload-service.ts"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC"}
|