@protontech/drive-sdk 0.0.12 → 0.1.0
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/cache/index.d.ts +1 -0
- package/dist/cache/index.js +3 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/memoryCache.d.ts +1 -1
- package/dist/cache/nullCache.d.ts +14 -0
- package/dist/cache/nullCache.js +37 -0
- package/dist/cache/nullCache.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/crypto/openPGPCrypto.js +2 -0
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/eventsGenerator.d.ts +14 -0
- package/dist/diagnostic/eventsGenerator.js +49 -0
- package/dist/diagnostic/eventsGenerator.js.map +1 -0
- package/dist/diagnostic/httpClient.d.ts +16 -0
- package/dist/diagnostic/httpClient.js +81 -0
- package/dist/diagnostic/httpClient.js.map +1 -0
- package/dist/diagnostic/index.d.ts +10 -0
- package/dist/diagnostic/index.js +35 -0
- package/dist/diagnostic/index.js.map +1 -0
- package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
- package/dist/diagnostic/integrityVerificationStream.js +56 -0
- package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
- package/dist/diagnostic/interface.d.ts +102 -0
- package/dist/diagnostic/interface.js +3 -0
- package/dist/diagnostic/interface.js.map +1 -0
- package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
- package/dist/diagnostic/sdkDiagnostic.js +216 -0
- package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
- package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
- package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
- package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
- package/dist/diagnostic/telemetry.d.ts +25 -0
- package/dist/diagnostic/telemetry.js +70 -0
- package/dist/diagnostic/telemetry.js.map +1 -0
- package/dist/diagnostic/zipGenerators.d.ts +9 -0
- package/dist/diagnostic/zipGenerators.js +64 -0
- package/dist/diagnostic/zipGenerators.js.map +1 -0
- package/dist/diagnostic/zipGenerators.test.js +144 -0
- package/dist/diagnostic/zipGenerators.test.js.map +1 -0
- package/dist/errors.d.ts +8 -3
- package/dist/errors.js +11 -4
- package/dist/errors.js.map +1 -1
- package/dist/interface/config.d.ts +26 -0
- package/dist/interface/config.js +3 -0
- package/dist/interface/config.js.map +1 -0
- package/dist/interface/download.d.ts +2 -2
- package/dist/interface/events.d.ts +60 -20
- package/dist/interface/events.js +11 -1
- package/dist/interface/events.js.map +1 -1
- package/dist/interface/httpClient.d.ts +0 -14
- package/dist/interface/index.d.ts +9 -5
- package/dist/interface/index.js +2 -1
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/nodes.d.ts +21 -1
- package/dist/interface/nodes.js +11 -0
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/sharing.d.ts +1 -0
- package/dist/interface/upload.d.ts +57 -3
- package/dist/internal/apiService/driveTypes.d.ts +1341 -465
- package/dist/internal/apiService/errors.js +2 -2
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/transformers.js +2 -0
- package/dist/internal/apiService/transformers.js.map +1 -1
- package/dist/internal/asyncIteratorMap.d.ts +15 -0
- package/dist/internal/asyncIteratorMap.js +59 -0
- package/dist/internal/asyncIteratorMap.js.map +1 -0
- package/dist/internal/asyncIteratorMap.test.js +120 -0
- package/dist/internal/asyncIteratorMap.test.js.map +1 -0
- package/dist/internal/download/apiService.js +32 -31
- package/dist/internal/download/apiService.js.map +1 -1
- package/dist/internal/download/fileDownloader.d.ts +2 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/events/apiService.d.ts +4 -6
- package/dist/internal/events/apiService.js +15 -22
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.d.ts +7 -10
- package/dist/internal/events/coreEventManager.js +19 -36
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.d.ts +1 -0
- package/dist/internal/events/coreEventManager.test.js +87 -0
- package/dist/internal/events/coreEventManager.test.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +11 -36
- package/dist/internal/events/eventManager.js +59 -105
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +167 -82
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +13 -33
- package/dist/internal/events/index.js +56 -72
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +59 -14
- package/dist/internal/events/interface.js +13 -3
- package/dist/internal/events/interface.js.map +1 -1
- package/dist/internal/events/volumeEventManager.d.ts +7 -17
- package/dist/internal/events/volumeEventManager.js +58 -45
- package/dist/internal/events/volumeEventManager.js.map +1 -1
- package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
- package/dist/internal/events/volumeEventManager.test.js +203 -0
- package/dist/internal/events/volumeEventManager.test.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +2 -2
- package/dist/internal/nodes/apiService.js +16 -6
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +30 -8
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.d.ts +10 -1
- package/dist/internal/nodes/cache.js +18 -0
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cache.test.js +1 -0
- package/dist/internal/nodes/cache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.d.ts +1 -1
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +34 -0
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/events.d.ts +7 -83
- package/dist/internal/nodes/events.js +43 -217
- package/dist/internal/nodes/events.js.map +1 -1
- package/dist/internal/nodes/events.test.js +27 -277
- package/dist/internal/nodes/events.test.js.map +1 -1
- package/dist/internal/nodes/index.d.ts +3 -4
- package/dist/internal/nodes/index.js +5 -5
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +3 -1
- package/dist/internal/nodes/nodesAccess.d.ts +15 -0
- package/dist/internal/nodes/nodesAccess.js +65 -7
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +132 -93
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +1 -3
- package/dist/internal/nodes/nodesManagement.js +12 -26
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +35 -14
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
- package/dist/internal/shares/cache.d.ts +2 -0
- package/dist/internal/shares/cache.js +2 -0
- package/dist/internal/shares/cache.js.map +1 -1
- package/dist/internal/shares/manager.d.ts +1 -0
- package/dist/internal/shares/manager.js +3 -0
- package/dist/internal/shares/manager.js.map +1 -1
- package/dist/internal/sharing/apiService.js +20 -2
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.js +1 -0
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/events.d.ts +23 -55
- package/dist/internal/sharing/events.js +46 -138
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +77 -180
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.d.ts +4 -5
- package/dist/internal/sharing/index.js +5 -5
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +3 -0
- package/dist/internal/sharing/sharingManagement.d.ts +2 -3
- package/dist/internal/sharing/sharingManagement.js +7 -9
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +9 -39
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
- package/dist/internal/upload/apiService.d.ts +2 -3
- package/dist/internal/upload/apiService.js +7 -4
- package/dist/internal/upload/apiService.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +49 -53
- package/dist/internal/upload/fileUploader.js +91 -395
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/fileUploader.test.js +38 -292
- package/dist/internal/upload/fileUploader.test.js.map +1 -1
- package/dist/internal/upload/index.d.ts +5 -5
- package/dist/internal/upload/index.js +23 -44
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/interface.d.ts +2 -0
- package/dist/internal/upload/manager.d.ts +6 -6
- package/dist/internal/upload/manager.js +32 -66
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +100 -117
- package/dist/internal/upload/manager.test.js.map +1 -1
- package/dist/internal/upload/streamUploader.d.ts +62 -0
- package/dist/internal/upload/streamUploader.js +440 -0
- package/dist/internal/upload/streamUploader.js.map +1 -0
- package/dist/internal/upload/streamUploader.test.d.ts +1 -0
- package/dist/internal/upload/streamUploader.test.js +358 -0
- package/dist/internal/upload/streamUploader.test.js.map +1 -0
- package/dist/protonDriveClient.d.ts +22 -165
- package/dist/protonDriveClient.js +27 -191
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePhotosClient.js +3 -2
- package/dist/protonDrivePhotosClient.js.map +1 -1
- package/package.json +4 -4
- package/src/cache/index.ts +1 -0
- package/src/cache/memoryCache.ts +1 -1
- package/src/cache/nullCache.ts +38 -0
- package/src/config.ts +17 -2
- package/src/crypto/openPGPCrypto.ts +2 -0
- package/src/diagnostic/eventsGenerator.ts +48 -0
- package/src/diagnostic/httpClient.ts +80 -0
- package/src/diagnostic/index.ts +38 -0
- package/src/diagnostic/integrityVerificationStream.ts +56 -0
- package/src/diagnostic/interface.ts +158 -0
- package/src/diagnostic/sdkDiagnostic.ts +238 -0
- package/src/diagnostic/sdkDiagnosticFull.ts +40 -0
- package/src/diagnostic/telemetry.ts +71 -0
- package/src/diagnostic/zipGenerators.test.ts +177 -0
- package/src/diagnostic/zipGenerators.ts +70 -0
- package/src/errors.ts +13 -4
- package/src/interface/config.ts +28 -0
- package/src/interface/download.ts +2 -2
- package/src/interface/events.ts +66 -21
- package/src/interface/httpClient.ts +0 -16
- package/src/interface/index.ts +9 -5
- package/src/interface/nodes.ts +32 -12
- package/src/interface/sharing.ts +1 -0
- package/src/interface/upload.ts +59 -3
- package/src/internal/apiService/driveTypes.ts +1341 -465
- package/src/internal/apiService/errors.ts +3 -2
- package/src/internal/apiService/transformers.ts +2 -0
- package/src/internal/asyncIteratorMap.test.ts +150 -0
- package/src/internal/asyncIteratorMap.ts +64 -0
- package/src/internal/download/apiService.ts +11 -8
- package/src/internal/download/fileDownloader.ts +2 -2
- package/src/internal/events/apiService.ts +25 -28
- package/src/internal/events/coreEventManager.test.ts +101 -0
- package/src/internal/events/coreEventManager.ts +20 -45
- package/src/internal/events/eventManager.test.ts +201 -88
- package/src/internal/events/eventManager.ts +69 -115
- package/src/internal/events/index.ts +54 -84
- package/src/internal/events/interface.ts +70 -15
- package/src/internal/events/volumeEventManager.test.ts +243 -0
- package/src/internal/events/volumeEventManager.ts +55 -53
- package/src/internal/nodes/apiService.test.ts +36 -7
- package/src/internal/nodes/apiService.ts +19 -7
- package/src/internal/nodes/cache.test.ts +1 -0
- package/src/internal/nodes/cache.ts +21 -2
- package/src/internal/nodes/cryptoService.test.ts +38 -0
- package/src/internal/nodes/cryptoService.ts +1 -1
- package/src/internal/nodes/events.test.ts +29 -335
- package/src/internal/nodes/events.ts +45 -253
- package/src/internal/nodes/index.ts +6 -8
- package/src/internal/nodes/interface.ts +6 -3
- package/src/internal/nodes/nodesAccess.test.ts +133 -91
- package/src/internal/nodes/nodesAccess.ts +70 -8
- package/src/internal/nodes/nodesManagement.test.ts +39 -15
- package/src/internal/nodes/nodesManagement.ts +12 -30
- package/src/internal/shares/cache.ts +4 -2
- package/src/internal/shares/manager.ts +9 -5
- package/src/internal/sharing/apiService.ts +25 -2
- package/src/internal/sharing/cache.ts +1 -1
- package/src/internal/sharing/cryptoService.ts +1 -0
- package/src/internal/sharing/events.test.ts +89 -195
- package/src/internal/sharing/events.ts +42 -156
- package/src/internal/sharing/index.ts +6 -9
- package/src/internal/sharing/interface.ts +6 -2
- package/src/internal/sharing/sharingManagement.test.ts +10 -40
- package/src/internal/sharing/sharingManagement.ts +7 -11
- package/src/internal/upload/apiService.ts +5 -6
- package/src/internal/upload/fileUploader.test.ts +46 -376
- package/src/internal/upload/fileUploader.ts +114 -494
- package/src/internal/upload/index.ts +30 -54
- package/src/internal/upload/interface.ts +2 -0
- package/src/internal/upload/manager.test.ts +107 -124
- package/src/internal/upload/manager.ts +48 -80
- package/src/internal/upload/streamUploader.test.ts +468 -0
- package/src/internal/upload/streamUploader.ts +550 -0
- package/src/protonDriveClient.ts +80 -248
- package/src/protonDrivePhotosClient.ts +4 -3
- package/dist/internal/events/cache.d.ts +0 -28
- package/dist/internal/events/cache.js +0 -67
- package/dist/internal/events/cache.js.map +0 -1
- package/dist/internal/events/cache.test.js +0 -43
- package/dist/internal/events/cache.test.js.map +0 -1
- package/dist/internal/nodes/index.test.js +0 -112
- package/dist/internal/nodes/index.test.js.map +0 -1
- package/src/internal/events/cache.test.ts +0 -47
- package/src/internal/events/cache.ts +0 -80
- package/src/internal/nodes/index.test.ts +0 -135
- /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
- /package/dist/internal/{nodes/index.test.d.ts → asyncIteratorMap.test.d.ts} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { c } from "ttag";
|
|
2
2
|
|
|
3
|
-
import { Logger,
|
|
3
|
+
import { Logger, ProtonDriveTelemetry, UploadMetadata } from "../../interface";
|
|
4
4
|
import { ValidationError, NodeAlreadyExistsValidationError } from "../../errors";
|
|
5
5
|
import { ErrorCode } from "../apiService";
|
|
6
|
-
import {
|
|
6
|
+
import { generateFileExtendedAttributes } from "../nodes";
|
|
7
7
|
import { UploadAPIService } from "./apiService";
|
|
8
8
|
import { UploadCryptoService } from "./cryptoService";
|
|
9
|
-
import { NodeRevisionDraft, NodesService,
|
|
9
|
+
import { NodeRevisionDraft, NodesService, NodeCrypto } from "./interface";
|
|
10
|
+
import { makeNodeUid, splitNodeUid } from "../uids";
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* UploadManager is responsible for creating and deleting draft nodes
|
|
@@ -21,12 +22,13 @@ export class UploadManager {
|
|
|
21
22
|
private apiService: UploadAPIService,
|
|
22
23
|
private cryptoService: UploadCryptoService,
|
|
23
24
|
private nodesService: NodesService,
|
|
24
|
-
private
|
|
25
|
+
private clientUid: string | undefined,
|
|
25
26
|
) {
|
|
26
27
|
this.logger = telemetry.getLogger('upload');
|
|
27
28
|
this.apiService = apiService;
|
|
28
29
|
this.cryptoService = cryptoService;
|
|
29
30
|
this.nodesService = nodesService;
|
|
31
|
+
this.clientUid = clientUid;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
async createDraftNode(parentFolderUid: string, name: string, metadata: UploadMetadata): Promise<NodeRevisionDraft> {
|
|
@@ -88,30 +90,40 @@ export class UploadManager {
|
|
|
88
90
|
base64ContentKeyPacket: generatedNodeCrypto.contentKey.encrypted.base64ContentKeyPacket,
|
|
89
91
|
armoredContentKeyPacketSignature: generatedNodeCrypto.contentKey.encrypted.armoredContentKeyPacketSignature,
|
|
90
92
|
signatureEmail: generatedNodeCrypto.signatureAddress.email,
|
|
91
|
-
// FIXME: client UID
|
|
92
93
|
});
|
|
93
94
|
return result;
|
|
94
95
|
} catch (error: unknown) {
|
|
95
96
|
if (error instanceof ValidationError) {
|
|
96
97
|
if (error.code === ErrorCode.ALREADY_EXISTS) {
|
|
97
98
|
this.logger.info(`Node with given name already exists`);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
|
|
100
|
+
const typedDetails = error.details as {
|
|
101
|
+
ConflictLinkID: string,
|
|
102
|
+
ConflictRevisionID?: string,
|
|
103
|
+
ConflictDraftRevisionID?: string,
|
|
104
|
+
ConflictDraftClientUID?: string,
|
|
105
|
+
} | undefined;
|
|
106
|
+
|
|
107
|
+
// If the client doesn't specify the client UID, it should
|
|
108
|
+
// never be considered own draft.
|
|
109
|
+
const isOwnDraftConflict = (
|
|
110
|
+
typedDetails?.ConflictDraftRevisionID &&
|
|
111
|
+
this.clientUid &&
|
|
112
|
+
typedDetails?.ConflictDraftClientUID === this.clientUid
|
|
103
113
|
);
|
|
104
114
|
|
|
105
115
|
// If there is existing draft created by this client,
|
|
106
116
|
// automatically delete it and try to create a new one
|
|
107
117
|
// with the same name again.
|
|
108
|
-
if (
|
|
118
|
+
if (typedDetails?.ConflictDraftRevisionID && (isOwnDraftConflict || metadata.overrideExistingDraftByOtherClient)) {
|
|
119
|
+
const existingDraftNodeUid = makeNodeUid(splitNodeUid(parentFolderUid).volumeId, typedDetails.ConflictLinkID);
|
|
120
|
+
|
|
109
121
|
let deleteFailed = false;
|
|
110
122
|
try {
|
|
111
|
-
this.logger.warn(`Deleting existing draft node ${
|
|
112
|
-
await this.apiService.deleteDraft(
|
|
123
|
+
this.logger.warn(`Deleting existing draft node ${existingDraftNodeUid} by ${typedDetails.ConflictDraftClientUID}`);
|
|
124
|
+
await this.apiService.deleteDraft(existingDraftNodeUid);
|
|
113
125
|
} catch (deleteDraftError: unknown) {
|
|
114
|
-
// Do not throw, let
|
|
126
|
+
// Do not throw, let throw the conflict error.
|
|
115
127
|
deleteFailed = true;
|
|
116
128
|
this.logger.error('Failed to delete existing draft node', deleteDraftError);
|
|
117
129
|
}
|
|
@@ -120,12 +132,19 @@ export class UploadManager {
|
|
|
120
132
|
}
|
|
121
133
|
}
|
|
122
134
|
|
|
135
|
+
if (isOwnDraftConflict) {
|
|
136
|
+
this.logger.warn(`Existing draft conflict by another client ${typedDetails.ConflictDraftClientUID}`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const existingNodeUid = typedDetails ? makeNodeUid(splitNodeUid(parentFolderUid).volumeId, typedDetails.ConflictLinkID) : undefined;
|
|
140
|
+
|
|
123
141
|
// If there is existing node, return special error
|
|
124
142
|
// that includes the available name the client can use.
|
|
125
143
|
throw new NodeAlreadyExistsValidationError(
|
|
126
144
|
error.message,
|
|
127
145
|
error.code,
|
|
128
|
-
|
|
146
|
+
existingNodeUid,
|
|
147
|
+
!!typedDetails?.ConflictDraftRevisionID,
|
|
129
148
|
);
|
|
130
149
|
}
|
|
131
150
|
}
|
|
@@ -133,10 +152,12 @@ export class UploadManager {
|
|
|
133
152
|
}
|
|
134
153
|
}
|
|
135
154
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
async findAvailableName(parentFolderUid: string, name: string): Promise<string> {
|
|
156
|
+
const { hashKey: parentHashKey } = await this.nodesService.getNodeKeys(parentFolderUid);
|
|
157
|
+
if (!parentHashKey) {
|
|
158
|
+
throw new ValidationError(c('Error').t`Creating files in non-folders is not allowed`);
|
|
159
|
+
}
|
|
160
|
+
|
|
140
161
|
const [namePart, extension] = splitExtension(name);
|
|
141
162
|
|
|
142
163
|
const batchSize = 10;
|
|
@@ -149,14 +170,9 @@ export class UploadManager {
|
|
|
149
170
|
|
|
150
171
|
const hashesToCheck = await this.cryptoService.generateNameHashes(parentHashKey, namesToCheck);
|
|
151
172
|
|
|
152
|
-
const {
|
|
173
|
+
const { availalbleHashes } = await this.apiService.checkAvailableHashes(
|
|
153
174
|
parentFolderUid,
|
|
154
|
-
|
|
155
|
-
...hashesToCheck.map(({ hash }) => hash),
|
|
156
|
-
// Adding the current name hash to get the existing draft
|
|
157
|
-
// node UID if it exists.
|
|
158
|
-
...startIndex ? [nameHash] : [],
|
|
159
|
-
],
|
|
175
|
+
hashesToCheck.map(({ hash }) => hash),
|
|
160
176
|
);
|
|
161
177
|
|
|
162
178
|
if (!availalbleHashes.length) {
|
|
@@ -169,12 +185,7 @@ export class UploadManager {
|
|
|
169
185
|
throw Error('Backend returned unexpected hash');
|
|
170
186
|
}
|
|
171
187
|
|
|
172
|
-
|
|
173
|
-
const ownPendingHash = pendingHashes.find(({ hash }) => hash === nameHash);
|
|
174
|
-
return {
|
|
175
|
-
availableName: availableHash.name,
|
|
176
|
-
existingDraftNodeUid: ownPendingHash?.nodeUid,
|
|
177
|
-
}
|
|
188
|
+
return availableHash.name;
|
|
178
189
|
}
|
|
179
190
|
}
|
|
180
191
|
|
|
@@ -229,7 +240,7 @@ export class UploadManager {
|
|
|
229
240
|
async commitDraft(
|
|
230
241
|
nodeRevisionDraft: NodeRevisionDraft,
|
|
231
242
|
manifest: Uint8Array,
|
|
232
|
-
|
|
243
|
+
_metadata: UploadMetadata,
|
|
233
244
|
extendedAttributes: {
|
|
234
245
|
modificationTime?: Date,
|
|
235
246
|
size?: number,
|
|
@@ -238,56 +249,13 @@ export class UploadManager {
|
|
|
238
249
|
sha1?: string,
|
|
239
250
|
},
|
|
240
251
|
},
|
|
241
|
-
encryptedSize: number,
|
|
242
252
|
): Promise<void> {
|
|
243
253
|
const generatedExtendedAttributes = generateFileExtendedAttributes(extendedAttributes);
|
|
244
254
|
const nodeCommitCrypto = await this.cryptoService.commitFile(nodeRevisionDraft.nodeKeys, manifest, generatedExtendedAttributes);
|
|
245
255
|
await this.apiService.commitDraftRevision(nodeRevisionDraft.nodeRevisionUid, nodeCommitCrypto);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
state: RevisionState.Active,
|
|
250
|
-
creationTime: new Date(),
|
|
251
|
-
storageSize: encryptedSize,
|
|
252
|
-
contentAuthor: resultOk(nodeCommitCrypto.signatureEmail),
|
|
253
|
-
claimedSize: metadata.expectedSize,
|
|
254
|
-
claimedModificationTime: extendedAttributes.modificationTime,
|
|
255
|
-
claimedDigests: {
|
|
256
|
-
sha1: extendedAttributes.digests?.sha1,
|
|
257
|
-
},
|
|
258
|
-
});
|
|
259
|
-
if (nodeRevisionDraft.newNodeInfo) {
|
|
260
|
-
const node: DecryptedNode = {
|
|
261
|
-
// Internal metadata
|
|
262
|
-
hash: nodeRevisionDraft.newNodeInfo.hash,
|
|
263
|
-
encryptedName: nodeRevisionDraft.newNodeInfo.encryptedName,
|
|
264
|
-
|
|
265
|
-
// Basic node metadata
|
|
266
|
-
uid: nodeRevisionDraft.nodeUid,
|
|
267
|
-
parentUid: nodeRevisionDraft.newNodeInfo.parentUid,
|
|
268
|
-
type: NodeType.File,
|
|
269
|
-
mediaType: metadata.mediaType,
|
|
270
|
-
creationTime: new Date(),
|
|
271
|
-
totalStorageSize: encryptedSize,
|
|
272
|
-
|
|
273
|
-
// Share node metadata
|
|
274
|
-
isShared: false,
|
|
275
|
-
directMemberRole: MemberRole.Inherited,
|
|
276
|
-
|
|
277
|
-
// Decrypted metadata
|
|
278
|
-
isStale: false,
|
|
279
|
-
keyAuthor: resultOk(nodeRevisionDraft.nodeKeys.signatureAddress.email),
|
|
280
|
-
nameAuthor: resultOk(nodeRevisionDraft.nodeKeys.signatureAddress.email),
|
|
281
|
-
name: resultOk(nodeRevisionDraft.newNodeInfo.name),
|
|
282
|
-
|
|
283
|
-
activeRevision,
|
|
284
|
-
}
|
|
285
|
-
await this.nodesEvents.nodeCreated(node);
|
|
286
|
-
} else {
|
|
287
|
-
await this.nodesEvents.nodeUpdated({
|
|
288
|
-
uid: nodeRevisionDraft.nodeUid,
|
|
289
|
-
activeRevision,
|
|
290
|
-
});
|
|
256
|
+
const node = await this.nodesService.getNode(nodeRevisionDraft.nodeUid);
|
|
257
|
+
if (node.parentUid) {
|
|
258
|
+
await this.nodesService.notifyChildCreated(node.parentUid);
|
|
291
259
|
}
|
|
292
260
|
}
|
|
293
261
|
}
|
|
@@ -297,7 +265,7 @@ export class UploadManager {
|
|
|
297
265
|
*/
|
|
298
266
|
function splitExtension(filename = ''): [string, string] {
|
|
299
267
|
const endIdx = filename.lastIndexOf('.');
|
|
300
|
-
if (endIdx === -1 || endIdx === filename.length-1) {
|
|
268
|
+
if (endIdx === -1 || endIdx === filename.length - 1) {
|
|
301
269
|
return [filename, ''];
|
|
302
270
|
}
|
|
303
271
|
return [filename.slice(0, endIdx), filename.slice(endIdx + 1)];
|