@protontech/drive-sdk 0.1.2 → 0.2.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/dist/crypto/driveCrypto.d.ts +11 -0
- package/dist/crypto/driveCrypto.js +20 -7
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/crypto/interface.d.ts +10 -1
- package/dist/crypto/openPGPCrypto.d.ts +18 -2
- package/dist/crypto/openPGPCrypto.js +25 -6
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/telemetry.d.ts +1 -1
- package/dist/diagnostic/telemetry.js +1 -1
- package/dist/diagnostic/telemetry.js.map +1 -1
- package/dist/interface/download.d.ts +46 -0
- package/dist/interface/index.d.ts +2 -2
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/nodes.d.ts +26 -1
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/sharing.d.ts +3 -1
- package/dist/interface/telemetry.d.ts +5 -2
- package/dist/interface/telemetry.js.map +1 -1
- package/dist/internal/apiService/apiService.js +1 -1
- package/dist/internal/apiService/apiService.js.map +1 -1
- package/dist/internal/apiService/driveTypes.d.ts +78 -165
- package/dist/internal/apiService/errorCodes.d.ts +1 -0
- package/dist/internal/apiService/errors.js +1 -0
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/index.d.ts +1 -1
- package/dist/internal/apiService/index.js +2 -2
- package/dist/internal/apiService/index.js.map +1 -1
- package/dist/internal/apiService/transformers.d.ts +1 -1
- package/dist/internal/apiService/transformers.js +2 -2
- package/dist/internal/apiService/transformers.js.map +1 -1
- package/dist/internal/download/blockIndex.d.ts +11 -0
- package/dist/internal/download/blockIndex.js +35 -0
- package/dist/internal/download/blockIndex.js.map +1 -0
- package/dist/internal/download/blockIndex.test.d.ts +1 -0
- package/dist/internal/download/blockIndex.test.js +147 -0
- package/dist/internal/download/blockIndex.test.js.map +1 -0
- package/dist/internal/download/fileDownloader.d.ts +6 -2
- package/dist/internal/download/fileDownloader.js +83 -6
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/download/fileDownloader.test.js +69 -4
- package/dist/internal/download/fileDownloader.test.js.map +1 -1
- package/dist/internal/download/interface.d.ts +4 -4
- package/dist/internal/download/seekableStream.d.ts +80 -0
- package/dist/internal/download/seekableStream.js +163 -0
- package/dist/internal/download/seekableStream.js.map +1 -0
- package/dist/internal/download/seekableStream.test.d.ts +1 -0
- package/dist/internal/download/seekableStream.test.js +149 -0
- package/dist/internal/download/seekableStream.test.js.map +1 -0
- package/dist/internal/download/telemetry.js +1 -1
- package/dist/internal/download/telemetry.js.map +1 -1
- package/dist/internal/download/telemetry.test.js +7 -7
- package/dist/internal/download/telemetry.test.js.map +1 -1
- package/dist/internal/errors.d.ts +1 -1
- package/dist/internal/errors.js +7 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/errors.test.js +44 -10
- package/dist/internal/errors.test.js.map +1 -1
- package/dist/internal/events/index.js +1 -1
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/nodes/apiService.js +16 -3
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +43 -7
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.js +12 -3
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cache.test.js +31 -1
- package/dist/internal/nodes/cache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.d.ts +4 -1
- package/dist/internal/nodes/cryptoService.js +66 -16
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +129 -46
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.d.ts +2 -1
- package/dist/internal/nodes/extendedAttributes.js +27 -1
- package/dist/internal/nodes/extendedAttributes.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.test.js +59 -6
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
- package/dist/internal/nodes/index.test.js +1 -1
- package/dist/internal/nodes/index.test.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +18 -2
- package/dist/internal/nodes/nodesAccess.js +11 -1
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.js +1 -1
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesRevisions.d.ts +4 -3
- package/dist/internal/nodes/nodesRevisions.js +2 -2
- package/dist/internal/nodes/nodesRevisions.js.map +1 -1
- package/dist/internal/shares/cryptoService.js +7 -4
- package/dist/internal/shares/cryptoService.js.map +1 -1
- package/dist/internal/shares/cryptoService.test.js +5 -3
- package/dist/internal/shares/cryptoService.test.js.map +1 -1
- package/dist/internal/sharing/apiService.js +5 -5
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.d.ts +1 -0
- package/dist/internal/sharing/cryptoService.js +22 -10
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.test.js +7 -4
- package/dist/internal/sharing/cryptoService.test.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.js +4 -2
- package/dist/internal/sharing/sharingAccess.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.test.js +6 -0
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
- package/dist/internal/upload/telemetry.js +2 -2
- package/dist/internal/upload/telemetry.js.map +1 -1
- package/dist/internal/upload/telemetry.test.js +7 -7
- package/dist/internal/upload/telemetry.test.js.map +1 -1
- package/dist/telemetry.d.ts +2 -2
- package/dist/telemetry.js +2 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/tests/telemetry.js +1 -1
- package/dist/tests/telemetry.js.map +1 -1
- package/dist/transformers.d.ts +1 -1
- package/dist/transformers.js +2 -1
- package/dist/transformers.js.map +1 -1
- package/package.json +1 -1
- package/src/crypto/driveCrypto.ts +70 -25
- package/src/crypto/interface.ts +15 -0
- package/src/crypto/openPGPCrypto.ts +37 -5
- package/src/diagnostic/telemetry.ts +1 -1
- package/src/interface/download.ts +46 -0
- package/src/interface/index.ts +2 -1
- package/src/interface/nodes.ts +28 -1
- package/src/interface/sharing.ts +3 -1
- package/src/interface/telemetry.ts +6 -1
- package/src/internal/apiService/apiService.ts +1 -1
- package/src/internal/apiService/driveTypes.ts +78 -165
- package/src/internal/apiService/errorCodes.ts +1 -0
- package/src/internal/apiService/errors.ts +1 -0
- package/src/internal/apiService/index.ts +1 -1
- package/src/internal/apiService/transformers.ts +1 -1
- package/src/internal/download/blockIndex.test.ts +158 -0
- package/src/internal/download/blockIndex.ts +36 -0
- package/src/internal/download/fileDownloader.test.ts +100 -7
- package/src/internal/download/fileDownloader.ts +109 -9
- package/src/internal/download/interface.ts +4 -4
- package/src/internal/download/seekableStream.test.ts +187 -0
- package/src/internal/download/seekableStream.ts +182 -0
- package/src/internal/download/telemetry.test.ts +7 -7
- package/src/internal/download/telemetry.ts +1 -1
- package/src/internal/errors.test.ts +45 -11
- package/src/internal/errors.ts +8 -0
- package/src/internal/events/index.ts +1 -1
- package/src/internal/nodes/apiService.test.ts +59 -15
- package/src/internal/nodes/apiService.ts +21 -4
- package/src/internal/nodes/cache.test.ts +34 -1
- package/src/internal/nodes/cache.ts +12 -3
- package/src/internal/nodes/cryptoService.test.ts +139 -47
- package/src/internal/nodes/cryptoService.ts +94 -9
- package/src/internal/nodes/extendedAttributes.test.ts +60 -7
- package/src/internal/nodes/extendedAttributes.ts +37 -1
- package/src/internal/nodes/index.test.ts +1 -1
- package/src/internal/nodes/interface.ts +19 -2
- package/src/internal/nodes/nodesAccess.ts +15 -1
- package/src/internal/nodes/nodesManagement.ts +1 -1
- package/src/internal/nodes/nodesRevisions.ts +14 -5
- package/src/internal/shares/cryptoService.test.ts +5 -3
- package/src/internal/shares/cryptoService.ts +7 -4
- package/src/internal/sharing/apiService.ts +6 -6
- package/src/internal/sharing/cryptoService.test.ts +7 -4
- package/src/internal/sharing/cryptoService.ts +27 -10
- package/src/internal/sharing/sharingAccess.test.ts +6 -0
- package/src/internal/sharing/sharingAccess.ts +4 -2
- package/src/internal/upload/telemetry.test.ts +7 -7
- package/src/internal/upload/telemetry.ts +2 -2
- package/src/telemetry.ts +2 -2
- package/src/tests/telemetry.ts +1 -1
- package/src/transformers.ts +4 -2
package/dist/telemetry.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export interface MetricHandler<T extends MetricEvent> {
|
|
|
58
58
|
* const logger = telemetry.getLogger('myLogger');
|
|
59
59
|
* logger.debug('Debug message');
|
|
60
60
|
*
|
|
61
|
-
* telemetry.
|
|
61
|
+
* telemetry.recordMetric({ name: 'somethingHappened', value: 42 });
|
|
62
62
|
*
|
|
63
63
|
* const logs = memoryLogHandler.getLogs();
|
|
64
64
|
* // Process logs
|
|
@@ -78,7 +78,7 @@ export declare class Telemetry<T extends MetricEvent> {
|
|
|
78
78
|
metricHandlers?: MetricHandler<T>[];
|
|
79
79
|
});
|
|
80
80
|
getLogger(name: string): Logger;
|
|
81
|
-
|
|
81
|
+
recordMetric(event: T): void;
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* Logger class that logs messages with different levels.
|
package/dist/telemetry.js
CHANGED
|
@@ -38,7 +38,7 @@ var LogLevel;
|
|
|
38
38
|
* const logger = telemetry.getLogger('myLogger');
|
|
39
39
|
* logger.debug('Debug message');
|
|
40
40
|
*
|
|
41
|
-
* telemetry.
|
|
41
|
+
* telemetry.recordMetric({ name: 'somethingHappened', value: 42 });
|
|
42
42
|
*
|
|
43
43
|
* const logs = memoryLogHandler.getLogs();
|
|
44
44
|
* // Process logs
|
|
@@ -60,7 +60,7 @@ class Telemetry {
|
|
|
60
60
|
getLogger(name) {
|
|
61
61
|
return new Logger(name, this.logFilter, this.logHandlers);
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
recordMetric(event) {
|
|
64
64
|
const metric = {
|
|
65
65
|
time: new Date(),
|
|
66
66
|
event,
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":";;;AAUA,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAa,SAAS;IACV,SAAS,CAAY;IACrB,WAAW,CAAe;IAC1B,cAAc,CAAqB;IAE3C,YAAY,OAAoG;QAC5G,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,SAAS,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,CAAC,IAAY;QAClB,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/telemetry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/tests/telemetry.ts"],"names":[],"mappings":";;AAGA,4CAKC;AAPD,qCAAyC;AAEzC,SAAgB,gBAAgB;IAC5B,OAAO;QACH,SAAS,EAAE,sBAAa;QACxB,
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/tests/telemetry.ts"],"names":[],"mappings":";;AAGA,4CAKC;AAPD,qCAAyC;AAEzC,SAAgB,gBAAgB;IAC5B,OAAO;QACH,SAAS,EAAE,sBAAa;QACxB,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;KAC1B,CAAC;AACN,CAAC"}
|
package/dist/transformers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MaybeNode as PublicMaybeNode, MaybeMissingNode as PublicMaybeMissingNode, Result, MissingNode } from './interface';
|
|
2
2
|
import { DecryptedNode as InternalNode } from './internal/nodes';
|
|
3
|
-
type InternalPartialNode = Pick<InternalNode, 'uid' | 'parentUid' | 'name' | 'keyAuthor' | 'nameAuthor' | '
|
|
3
|
+
type InternalPartialNode = Pick<InternalNode, 'uid' | 'parentUid' | 'name' | 'keyAuthor' | 'nameAuthor' | 'directRole' | 'membership' | 'type' | 'mediaType' | 'isShared' | 'creationTime' | 'trashTime' | 'activeRevision' | 'folder' | 'totalStorageSize' | 'errors' | 'shareId' | 'treeEventScopeId'>;
|
|
4
4
|
type NodeUid = string | {
|
|
5
5
|
uid: string;
|
|
6
6
|
} | Result<{
|
package/dist/transformers.js
CHANGED
|
@@ -49,7 +49,8 @@ function convertInternalNode(node) {
|
|
|
49
49
|
parentUid: node.parentUid,
|
|
50
50
|
keyAuthor: node.keyAuthor,
|
|
51
51
|
nameAuthor: node.nameAuthor,
|
|
52
|
-
|
|
52
|
+
directRole: node.directRole,
|
|
53
|
+
membership: node.membership,
|
|
53
54
|
type: node.type,
|
|
54
55
|
mediaType: node.mediaType,
|
|
55
56
|
isShared: node.isShared,
|
package/dist/transformers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../src/transformers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -178,10 +178,18 @@ export class DriveCrypto {
|
|
|
178
178
|
key: PrivateKey;
|
|
179
179
|
passphraseSessionKey: SessionKey;
|
|
180
180
|
verified: VERIFICATION_STATUS;
|
|
181
|
+
verificationErrors?: Error[];
|
|
181
182
|
}> {
|
|
182
|
-
const passphraseSessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(
|
|
183
|
+
const passphraseSessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(
|
|
184
|
+
armoredPassphrase,
|
|
185
|
+
decryptionKeys,
|
|
186
|
+
);
|
|
183
187
|
|
|
184
|
-
const {
|
|
188
|
+
const {
|
|
189
|
+
data: decryptedPassphrase,
|
|
190
|
+
verified,
|
|
191
|
+
verificationErrors,
|
|
192
|
+
} = await this.openPGPCrypto.decryptArmoredAndVerifyDetached(
|
|
185
193
|
armoredPassphrase,
|
|
186
194
|
armoredPassphraseSignature,
|
|
187
195
|
passphraseSessionKey,
|
|
@@ -196,6 +204,7 @@ export class DriveCrypto {
|
|
|
196
204
|
key,
|
|
197
205
|
passphraseSessionKey,
|
|
198
206
|
verified,
|
|
207
|
+
verificationErrors,
|
|
199
208
|
};
|
|
200
209
|
}
|
|
201
210
|
|
|
@@ -287,20 +296,24 @@ export class DriveCrypto {
|
|
|
287
296
|
): Promise<{
|
|
288
297
|
sessionKey: SessionKey;
|
|
289
298
|
verified?: VERIFICATION_STATUS;
|
|
299
|
+
verificationErrors?: Error[];
|
|
290
300
|
}> {
|
|
291
301
|
const data = base64StringToUint8Array(base64data);
|
|
292
302
|
|
|
293
303
|
const sessionKey = await this.openPGPCrypto.decryptSessionKey(data, decryptionKeys);
|
|
294
304
|
|
|
295
305
|
let verified;
|
|
306
|
+
let verificationErrors;
|
|
296
307
|
if (armoredSignature) {
|
|
297
|
-
const result = await this.openPGPCrypto.
|
|
308
|
+
const result = await this.openPGPCrypto.verifyArmored(sessionKey.data, armoredSignature, verificationKeys);
|
|
298
309
|
verified = result.verified;
|
|
310
|
+
verificationErrors = result.verificationErrors;
|
|
299
311
|
}
|
|
300
312
|
|
|
301
313
|
return {
|
|
302
314
|
sessionKey,
|
|
303
315
|
verified,
|
|
316
|
+
verificationErrors,
|
|
304
317
|
};
|
|
305
318
|
}
|
|
306
319
|
|
|
@@ -423,15 +436,17 @@ export class DriveCrypto {
|
|
|
423
436
|
): Promise<{
|
|
424
437
|
name: string;
|
|
425
438
|
verified: VERIFICATION_STATUS;
|
|
439
|
+
verificationErrors?: Error[];
|
|
426
440
|
}> {
|
|
427
|
-
const {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
);
|
|
441
|
+
const {
|
|
442
|
+
data: name,
|
|
443
|
+
verified,
|
|
444
|
+
verificationErrors,
|
|
445
|
+
} = await this.openPGPCrypto.decryptArmoredAndVerify(armoredNodeName, [decryptionKey], verificationKeys);
|
|
432
446
|
return {
|
|
433
447
|
name: uint8ArrayToUtf8(name),
|
|
434
448
|
verified,
|
|
449
|
+
verificationErrors,
|
|
435
450
|
};
|
|
436
451
|
}
|
|
437
452
|
|
|
@@ -448,6 +463,7 @@ export class DriveCrypto {
|
|
|
448
463
|
): Promise<{
|
|
449
464
|
hashKey: Uint8Array;
|
|
450
465
|
verified: VERIFICATION_STATUS;
|
|
466
|
+
verificationErrors?: Error[];
|
|
451
467
|
}> {
|
|
452
468
|
// In the past, we had misunderstanding what key is used to sign hash
|
|
453
469
|
// key. Originally, it meant to be the node key, which web used for all
|
|
@@ -455,7 +471,11 @@ export class DriveCrypto {
|
|
|
455
471
|
// Similarly, iOS or Android used address key for all nodes. Latest
|
|
456
472
|
// versions should use node key in all cases, but we accept also
|
|
457
473
|
// address key. Its still signed with a valid key.
|
|
458
|
-
const {
|
|
474
|
+
const {
|
|
475
|
+
data: hashKey,
|
|
476
|
+
verified,
|
|
477
|
+
verificationErrors,
|
|
478
|
+
} = await this.openPGPCrypto.decryptArmoredAndVerify(
|
|
459
479
|
armoredHashKey,
|
|
460
480
|
[decryptionAndVerificationKey],
|
|
461
481
|
[decryptionAndVerificationKey, ...extraVerificationKeys],
|
|
@@ -463,6 +483,7 @@ export class DriveCrypto {
|
|
|
463
483
|
return {
|
|
464
484
|
hashKey,
|
|
465
485
|
verified,
|
|
486
|
+
verificationErrors,
|
|
466
487
|
};
|
|
467
488
|
}
|
|
468
489
|
|
|
@@ -491,8 +512,13 @@ export class DriveCrypto {
|
|
|
491
512
|
): Promise<{
|
|
492
513
|
extendedAttributes: string;
|
|
493
514
|
verified: VERIFICATION_STATUS;
|
|
515
|
+
verificationErrors?: Error[];
|
|
494
516
|
}> {
|
|
495
|
-
const {
|
|
517
|
+
const {
|
|
518
|
+
data: decryptedExtendedAttributes,
|
|
519
|
+
verified,
|
|
520
|
+
verificationErrors,
|
|
521
|
+
} = await this.openPGPCrypto.decryptArmoredAndVerify(
|
|
496
522
|
armoreExtendedAttributes,
|
|
497
523
|
[decryptionKey],
|
|
498
524
|
verificationKeys,
|
|
@@ -501,6 +527,7 @@ export class DriveCrypto {
|
|
|
501
527
|
return {
|
|
502
528
|
extendedAttributes: uint8ArrayToUtf8(decryptedExtendedAttributes),
|
|
503
529
|
verified,
|
|
530
|
+
verificationErrors,
|
|
504
531
|
};
|
|
505
532
|
}
|
|
506
533
|
|
|
@@ -524,6 +551,23 @@ export class DriveCrypto {
|
|
|
524
551
|
};
|
|
525
552
|
}
|
|
526
553
|
|
|
554
|
+
async verifyInvitation(
|
|
555
|
+
base64KeyPacket: string,
|
|
556
|
+
armoredKeyPacketSignature: string,
|
|
557
|
+
verificationKeys: PublicKey[],
|
|
558
|
+
): Promise<{
|
|
559
|
+
verified: VERIFICATION_STATUS;
|
|
560
|
+
verificationErrors?: Error[];
|
|
561
|
+
}> {
|
|
562
|
+
const { verified, verificationErrors } = await this.openPGPCrypto.verifyArmored(
|
|
563
|
+
base64StringToUint8Array(base64KeyPacket),
|
|
564
|
+
armoredKeyPacketSignature,
|
|
565
|
+
verificationKeys,
|
|
566
|
+
SIGNING_CONTEXTS.SHARING_INVITER,
|
|
567
|
+
);
|
|
568
|
+
return { verified, verificationErrors };
|
|
569
|
+
}
|
|
570
|
+
|
|
527
571
|
async acceptInvitation(
|
|
528
572
|
base64KeyPacket: string,
|
|
529
573
|
signingKey: PrivateKey,
|
|
@@ -591,15 +635,17 @@ export class DriveCrypto {
|
|
|
591
635
|
): Promise<{
|
|
592
636
|
decryptedThumbnail: Uint8Array;
|
|
593
637
|
verified: VERIFICATION_STATUS;
|
|
638
|
+
verificationErrors?: Error[];
|
|
594
639
|
}> {
|
|
595
|
-
const {
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
);
|
|
640
|
+
const {
|
|
641
|
+
data: decryptedThumbnail,
|
|
642
|
+
verified,
|
|
643
|
+
verificationErrors,
|
|
644
|
+
} = await this.openPGPCrypto.decryptAndVerify(encryptedThumbnail, sessionKey, verificationKeys);
|
|
600
645
|
return {
|
|
601
646
|
decryptedThumbnail,
|
|
602
647
|
verified,
|
|
648
|
+
verificationErrors,
|
|
603
649
|
};
|
|
604
650
|
}
|
|
605
651
|
|
|
@@ -627,15 +673,8 @@ export class DriveCrypto {
|
|
|
627
673
|
};
|
|
628
674
|
}
|
|
629
675
|
|
|
630
|
-
async decryptBlock(
|
|
631
|
-
|
|
632
|
-
sessionKey: SessionKey,
|
|
633
|
-
): Promise<Uint8Array> {
|
|
634
|
-
const { data: decryptedBlock } = await this.openPGPCrypto.decryptAndVerify(
|
|
635
|
-
encryptedBlock,
|
|
636
|
-
sessionKey,
|
|
637
|
-
[],
|
|
638
|
-
);
|
|
676
|
+
async decryptBlock(encryptedBlock: Uint8Array, sessionKey: SessionKey): Promise<Uint8Array> {
|
|
677
|
+
const { data: decryptedBlock } = await this.openPGPCrypto.decryptAndVerify(encryptedBlock, sessionKey, []);
|
|
639
678
|
|
|
640
679
|
return decryptedBlock;
|
|
641
680
|
}
|
|
@@ -658,10 +697,16 @@ export class DriveCrypto {
|
|
|
658
697
|
verificationKeys: PublicKey | PublicKey[],
|
|
659
698
|
): Promise<{
|
|
660
699
|
verified: VERIFICATION_STATUS;
|
|
700
|
+
verificationErrors?: Error[];
|
|
661
701
|
}> {
|
|
662
|
-
const { verified } = await this.openPGPCrypto.
|
|
702
|
+
const { verified, verificationErrors } = await this.openPGPCrypto.verifyArmored(
|
|
703
|
+
manifest,
|
|
704
|
+
armoredSignature,
|
|
705
|
+
verificationKeys,
|
|
706
|
+
);
|
|
663
707
|
return {
|
|
664
708
|
verified,
|
|
709
|
+
verificationErrors,
|
|
665
710
|
};
|
|
666
711
|
}
|
|
667
712
|
|
package/src/crypto/interface.ts
CHANGED
|
@@ -170,11 +170,22 @@ export interface OpenPGPCrypto {
|
|
|
170
170
|
}>;
|
|
171
171
|
|
|
172
172
|
verify: (
|
|
173
|
+
data: Uint8Array,
|
|
174
|
+
signature: Uint8Array,
|
|
175
|
+
verificationKeys: PublicKey | PublicKey[],
|
|
176
|
+
) => Promise<{
|
|
177
|
+
verified: VERIFICATION_STATUS;
|
|
178
|
+
verificationErrors?: Error[];
|
|
179
|
+
}>;
|
|
180
|
+
|
|
181
|
+
verifyArmored: (
|
|
173
182
|
data: Uint8Array,
|
|
174
183
|
armoredSignature: string,
|
|
175
184
|
verificationKeys: PublicKey | PublicKey[],
|
|
185
|
+
signatureContext?: string,
|
|
176
186
|
) => Promise<{
|
|
177
187
|
verified: VERIFICATION_STATUS;
|
|
188
|
+
verificationErrors?: Error[];
|
|
178
189
|
}>;
|
|
179
190
|
|
|
180
191
|
decryptSessionKey: (data: Uint8Array, decryptionKeys: PrivateKey | PrivateKey[]) => Promise<SessionKey>;
|
|
@@ -190,6 +201,7 @@ export interface OpenPGPCrypto {
|
|
|
190
201
|
): Promise<{
|
|
191
202
|
data: Uint8Array;
|
|
192
203
|
verified: VERIFICATION_STATUS;
|
|
204
|
+
verificationErrors?: Error[];
|
|
193
205
|
}>;
|
|
194
206
|
|
|
195
207
|
decryptAndVerifyDetached(
|
|
@@ -200,6 +212,7 @@ export interface OpenPGPCrypto {
|
|
|
200
212
|
): Promise<{
|
|
201
213
|
data: Uint8Array;
|
|
202
214
|
verified: VERIFICATION_STATUS;
|
|
215
|
+
verificationErrors?: Error[];
|
|
203
216
|
}>;
|
|
204
217
|
|
|
205
218
|
decryptArmored(armoredData: string, decryptionKeys: PrivateKey | PrivateKey[]): Promise<Uint8Array>;
|
|
@@ -211,6 +224,7 @@ export interface OpenPGPCrypto {
|
|
|
211
224
|
) => Promise<{
|
|
212
225
|
data: Uint8Array;
|
|
213
226
|
verified: VERIFICATION_STATUS;
|
|
227
|
+
verificationErrors?: Error[];
|
|
214
228
|
}>;
|
|
215
229
|
|
|
216
230
|
decryptArmoredAndVerifyDetached: (
|
|
@@ -221,6 +235,7 @@ export interface OpenPGPCrypto {
|
|
|
221
235
|
) => Promise<{
|
|
222
236
|
data: Uint8Array;
|
|
223
237
|
verified: VERIFICATION_STATUS;
|
|
238
|
+
verificationErrors?: Error[];
|
|
224
239
|
}>;
|
|
225
240
|
|
|
226
241
|
decryptArmoredWithPassword(armoredData: string, password: string): Promise<Uint8Array>;
|
|
@@ -45,6 +45,7 @@ export interface OpenPGPCryptoProxy {
|
|
|
45
45
|
// Web clients are using newer pmcrypto, but CLI is using older version due to build issues with Bun.
|
|
46
46
|
verified?: VERIFICATION_STATUS;
|
|
47
47
|
verificationStatus?: VERIFICATION_STATUS;
|
|
48
|
+
verificationErrors?: Error[];
|
|
48
49
|
}>;
|
|
49
50
|
signMessage: (options: {
|
|
50
51
|
format: 'binary' | 'armored';
|
|
@@ -55,13 +56,16 @@ export interface OpenPGPCryptoProxy {
|
|
|
55
56
|
}) => Promise<Uint8Array | string>;
|
|
56
57
|
verifyMessage: (options: {
|
|
57
58
|
binaryData: Uint8Array;
|
|
58
|
-
armoredSignature
|
|
59
|
+
armoredSignature?: string;
|
|
60
|
+
binarySignature?: Uint8Array;
|
|
59
61
|
verificationKeys: PublicKey | PublicKey[];
|
|
62
|
+
signatureContext?: { critical: boolean; value: string };
|
|
60
63
|
}) => Promise<{
|
|
61
64
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
62
65
|
// Web clients are using newer pmcrypto, but CLI is using older version due to build issues with Bun.
|
|
63
66
|
verified?: VERIFICATION_STATUS;
|
|
64
67
|
verificationStatus?: VERIFICATION_STATUS;
|
|
68
|
+
errors?: Error[];
|
|
65
69
|
}>;
|
|
66
70
|
}
|
|
67
71
|
|
|
@@ -238,16 +242,38 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
238
242
|
};
|
|
239
243
|
}
|
|
240
244
|
|
|
241
|
-
async verify(data: Uint8Array,
|
|
242
|
-
const { verified, verificationStatus } = await this.cryptoProxy.verifyMessage({
|
|
245
|
+
async verify(data: Uint8Array, signature: Uint8Array, verificationKeys: PublicKey | PublicKey[]) {
|
|
246
|
+
const { verified, verificationStatus, errors } = await this.cryptoProxy.verifyMessage({
|
|
247
|
+
binaryData: data,
|
|
248
|
+
binarySignature: signature,
|
|
249
|
+
verificationKeys,
|
|
250
|
+
});
|
|
251
|
+
return {
|
|
252
|
+
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
253
|
+
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
254
|
+
verified: verified || verificationStatus!,
|
|
255
|
+
verificationErrors: errors,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
async verifyArmored(
|
|
260
|
+
data: Uint8Array,
|
|
261
|
+
armoredSignature: string,
|
|
262
|
+
verificationKeys: PublicKey | PublicKey[],
|
|
263
|
+
signatureContext?: string,
|
|
264
|
+
) {
|
|
265
|
+
const { verified, verificationStatus, errors } = await this.cryptoProxy.verifyMessage({
|
|
243
266
|
binaryData: data,
|
|
244
267
|
armoredSignature,
|
|
245
268
|
verificationKeys,
|
|
269
|
+
signatureContext: signatureContext ? { critical: true, value: signatureContext } : undefined,
|
|
246
270
|
});
|
|
271
|
+
|
|
247
272
|
return {
|
|
248
273
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
249
274
|
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
250
275
|
verified: verified || verificationStatus!,
|
|
276
|
+
verificationErrors: errors,
|
|
251
277
|
};
|
|
252
278
|
}
|
|
253
279
|
|
|
@@ -290,6 +316,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
290
316
|
data: decryptedData,
|
|
291
317
|
verified,
|
|
292
318
|
verificationStatus,
|
|
319
|
+
verificationErrors,
|
|
293
320
|
} = await this.cryptoProxy.decryptMessage({
|
|
294
321
|
binaryMessage: data,
|
|
295
322
|
sessionKeys: sessionKey,
|
|
@@ -302,6 +329,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
302
329
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
303
330
|
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
304
331
|
verified: verified || verificationStatus!,
|
|
332
|
+
verificationErrors,
|
|
305
333
|
};
|
|
306
334
|
}
|
|
307
335
|
|
|
@@ -315,6 +343,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
315
343
|
data: decryptedData,
|
|
316
344
|
verified,
|
|
317
345
|
verificationStatus,
|
|
346
|
+
verificationErrors,
|
|
318
347
|
} = await this.cryptoProxy.decryptMessage({
|
|
319
348
|
binaryMessage: data,
|
|
320
349
|
binarySignature: signature,
|
|
@@ -328,6 +357,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
328
357
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
329
358
|
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
330
359
|
verified: verified || verificationStatus!,
|
|
360
|
+
verificationErrors,
|
|
331
361
|
};
|
|
332
362
|
}
|
|
333
363
|
|
|
@@ -345,7 +375,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
345
375
|
decryptionKeys: PrivateKey | PrivateKey[],
|
|
346
376
|
verificationKeys: PublicKey | PublicKey[],
|
|
347
377
|
) {
|
|
348
|
-
const { data, verified, verificationStatus } = await this.cryptoProxy.decryptMessage({
|
|
378
|
+
const { data, verified, verificationStatus, verificationErrors } = await this.cryptoProxy.decryptMessage({
|
|
349
379
|
armoredMessage: armoredData,
|
|
350
380
|
decryptionKeys,
|
|
351
381
|
verificationKeys,
|
|
@@ -357,6 +387,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
357
387
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
358
388
|
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
359
389
|
verified: verified || verificationStatus!,
|
|
390
|
+
verificationErrors,
|
|
360
391
|
};
|
|
361
392
|
}
|
|
362
393
|
|
|
@@ -366,7 +397,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
366
397
|
sessionKey: SessionKey,
|
|
367
398
|
verificationKeys: PublicKey | PublicKey[],
|
|
368
399
|
) {
|
|
369
|
-
const { data, verified, verificationStatus } = await this.cryptoProxy.decryptMessage({
|
|
400
|
+
const { data, verified, verificationStatus, verificationErrors } = await this.cryptoProxy.decryptMessage({
|
|
370
401
|
armoredMessage: armoredData,
|
|
371
402
|
armoredSignature,
|
|
372
403
|
sessionKeys: sessionKey,
|
|
@@ -379,6 +410,7 @@ export class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
379
410
|
// pmcrypto 8.3.0 changes `verified` to `verificationStatus`.
|
|
380
411
|
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
381
412
|
verified: verified || verificationStatus!,
|
|
413
|
+
verificationErrors,
|
|
382
414
|
};
|
|
383
415
|
}
|
|
384
416
|
|
|
@@ -26,6 +26,35 @@ export interface FileDownloader {
|
|
|
26
26
|
streamFactory: WritableStream,
|
|
27
27
|
onProgress?: (downloadedBytes: number) => void,
|
|
28
28
|
): DownloadController;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get a seekable stream that can be used to download specific range of
|
|
32
|
+
* data from the file. This is useful for video players to download the
|
|
33
|
+
* next several bytes of the video, or skip to the middle without the
|
|
34
|
+
* need to download the entire file.
|
|
35
|
+
*
|
|
36
|
+
* Stream doesn't verify data integrity. For the full integrity of
|
|
37
|
+
* the file, use `writeToStream` instead.
|
|
38
|
+
*
|
|
39
|
+
* The stream is not opportunitistically downloading the data ahead of
|
|
40
|
+
* the time. It will only download the data when it is requested. To
|
|
41
|
+
* provide smooth experience, pre-buffer the data based on the expected
|
|
42
|
+
* playback speed.
|
|
43
|
+
*
|
|
44
|
+
* The file is chunked into blocks that must be fully downloaded to provide
|
|
45
|
+
* given range of data within the block. To avoid downloading the same
|
|
46
|
+
* block multiple times, a few blocks can be cached. The size of the cache
|
|
47
|
+
* might change in the future to improve performance.
|
|
48
|
+
*
|
|
49
|
+
* Example:
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* const seekableStream = fileDownloader.getSeekableStream();
|
|
53
|
+
* await seekableStream.seek(1000);
|
|
54
|
+
* const { value, done } = await seekableStream.read(100);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
getSeekableStream(): SeekableReadableStream;
|
|
29
58
|
}
|
|
30
59
|
|
|
31
60
|
export interface DownloadController {
|
|
@@ -33,3 +62,20 @@ export interface DownloadController {
|
|
|
33
62
|
resume(): void;
|
|
34
63
|
completion(): Promise<void>;
|
|
35
64
|
}
|
|
65
|
+
|
|
66
|
+
export interface SeekableReadableStream extends ReadableStream<Uint8Array> {
|
|
67
|
+
/**
|
|
68
|
+
* Read a specific number of bytes from the stream at the current position.
|
|
69
|
+
*
|
|
70
|
+
* @param numBytes - The number of bytes to read.
|
|
71
|
+
* @returns A promise that resolves to the read bytes.
|
|
72
|
+
*/
|
|
73
|
+
read(numBytes: number): Promise<{ value: Uint8Array; done: boolean }>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Seek to the given position in the stream from the beginning of the stream.
|
|
77
|
+
*
|
|
78
|
+
* @param position - The position to seek to in bytes.
|
|
79
|
+
*/
|
|
80
|
+
seek(position: number): void | Promise<void>;
|
|
81
|
+
}
|
package/src/interface/index.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type { Author, UnverifiedAuthorError, AnonymousUser } from './author';
|
|
|
13
13
|
export type { ProtonDriveConfig } from './config';
|
|
14
14
|
export type { Device, DeviceOrUid } from './devices';
|
|
15
15
|
export { DeviceType } from './devices';
|
|
16
|
-
export type { FileDownloader, DownloadController } from './download';
|
|
16
|
+
export type { FileDownloader, DownloadController, SeekableReadableStream } from './download';
|
|
17
17
|
export type {
|
|
18
18
|
DriveListener,
|
|
19
19
|
LatestEventIdProvider,
|
|
@@ -41,6 +41,7 @@ export type {
|
|
|
41
41
|
NodeOrUid,
|
|
42
42
|
RevisionOrUid,
|
|
43
43
|
NodeResult,
|
|
44
|
+
Membership,
|
|
44
45
|
} from './nodes';
|
|
45
46
|
export { NodeType, MemberRole, RevisionState } from './nodes';
|
|
46
47
|
export type {
|
package/src/interface/nodes.ts
CHANGED
|
@@ -57,7 +57,17 @@ export type NodeEntity = {
|
|
|
57
57
|
* the file, key and content author is user A, while name author is user B.
|
|
58
58
|
*/
|
|
59
59
|
nameAuthor: Author;
|
|
60
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Role set directly on the node. If not set, the role is inherited from
|
|
62
|
+
* the parent node. Client must traverse the tree to get the actual role.
|
|
63
|
+
* Actual role should be the highest role available in the tree.
|
|
64
|
+
*/
|
|
65
|
+
directRole: MemberRole;
|
|
66
|
+
/**
|
|
67
|
+
* Membership information set directly on the node. If not set, the
|
|
68
|
+
* membership is inherited from the parent node.
|
|
69
|
+
*/
|
|
70
|
+
membership?: Membership;
|
|
61
71
|
type: NodeType;
|
|
62
72
|
mediaType?: string;
|
|
63
73
|
/**
|
|
@@ -157,6 +167,23 @@ export enum NodeType {
|
|
|
157
167
|
Album = 'album',
|
|
158
168
|
}
|
|
159
169
|
|
|
170
|
+
export type Membership = {
|
|
171
|
+
role: MemberRole;
|
|
172
|
+
/**
|
|
173
|
+
* Date when the node was shared with the user.
|
|
174
|
+
*/
|
|
175
|
+
inviteTime: Date;
|
|
176
|
+
/**
|
|
177
|
+
* Author who shared the node with the user.
|
|
178
|
+
*
|
|
179
|
+
* If the author cannot be verified, it means that the invitation could
|
|
180
|
+
* be forged by bad actor. User should be warned before accepting
|
|
181
|
+
* the invitation or opening the shared content.
|
|
182
|
+
*/
|
|
183
|
+
sharedBy: Author;
|
|
184
|
+
// TODO: acceptedBy: Author;
|
|
185
|
+
};
|
|
186
|
+
|
|
160
187
|
export enum MemberRole {
|
|
161
188
|
Viewer = 'viewer',
|
|
162
189
|
Editor = 'editor',
|
package/src/interface/sharing.ts
CHANGED
|
@@ -51,6 +51,7 @@ export type Bookmark = {
|
|
|
51
51
|
uid: string;
|
|
52
52
|
creationTime: Date;
|
|
53
53
|
url: string;
|
|
54
|
+
customPassword?: string;
|
|
54
55
|
node: {
|
|
55
56
|
name: string;
|
|
56
57
|
type: NodeType;
|
|
@@ -65,8 +66,9 @@ export type Bookmark = {
|
|
|
65
66
|
* SDK to represent the bookmark in a way that is easy to work with. Whenever
|
|
66
67
|
* any field cannot be decrypted, it is returned as `DegradedBookmark` type.
|
|
67
68
|
*/
|
|
68
|
-
export type DegradedBookmark = Omit<Bookmark, 'url' | 'node'> & {
|
|
69
|
+
export type DegradedBookmark = Omit<Bookmark, 'url' | 'customPassword' | 'node'> & {
|
|
69
70
|
url: Result<string, Error>;
|
|
71
|
+
customPassword: Result<string | undefined, Error>;
|
|
70
72
|
node: Omit<Bookmark['node'], 'name'> & {
|
|
71
73
|
name: Result<string, Error | InvalidNameError>;
|
|
72
74
|
};
|