@protontech/drive-sdk 0.9.1 → 0.9.3
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/interface.d.ts +6 -27
- package/dist/crypto/interface.js.map +1 -1
- package/dist/crypto/openPGPCrypto.d.ts +25 -25
- package/dist/crypto/openPGPCrypto.js +12 -24
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/diagnostic.d.ts +3 -1
- package/dist/diagnostic/diagnostic.js +8 -0
- package/dist/diagnostic/diagnostic.js.map +1 -1
- package/dist/diagnostic/interface.d.ts +11 -0
- package/dist/diagnostic/sdkDiagnosticMain.d.ts +2 -1
- package/dist/diagnostic/sdkDiagnosticMain.js +28 -0
- package/dist/diagnostic/sdkDiagnosticMain.js.map +1 -1
- package/dist/diagnostic/sdkDiagnosticPhotos.d.ts +2 -1
- package/dist/diagnostic/sdkDiagnosticPhotos.js +31 -0
- package/dist/diagnostic/sdkDiagnosticPhotos.js.map +1 -1
- package/dist/internal/apiService/driveTypes.d.ts +492 -384
- package/dist/internal/apiService/transformers.d.ts +10 -1
- package/dist/internal/apiService/transformers.js +13 -1
- package/dist/internal/apiService/transformers.js.map +1 -1
- package/dist/internal/nodes/apiService.d.ts +1 -1
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +1 -1
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.d.ts +1 -0
- package/dist/internal/nodes/nodesAccess.js +6 -2
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/sharing/apiService.js +10 -2
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharingPublic/index.d.ts +3 -3
- package/dist/internal/sharingPublic/index.js +8 -8
- package/dist/internal/sharingPublic/index.js.map +1 -1
- package/dist/internal/sharingPublic/nodes.d.ts +30 -2
- package/dist/internal/sharingPublic/nodes.js +47 -1
- package/dist/internal/sharingPublic/nodes.js.map +1 -1
- package/dist/internal/sharingPublic/session/apiService.js +1 -1
- package/dist/internal/sharingPublic/session/apiService.js.map +1 -1
- package/dist/internal/sharingPublic/session/interface.d.ts +1 -1
- package/dist/internal/sharingPublic/session/manager.d.ts +2 -0
- package/dist/internal/sharingPublic/session/manager.js +6 -2
- package/dist/internal/sharingPublic/session/manager.js.map +1 -1
- package/dist/protonDriveClient.js +2 -1
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePublicLinkClient.d.ts +3 -2
- package/dist/protonDrivePublicLinkClient.js +2 -2
- package/dist/protonDrivePublicLinkClient.js.map +1 -1
- package/package.json +1 -1
- package/src/crypto/interface.ts +6 -39
- package/src/crypto/openPGPCrypto.ts +60 -69
- package/src/diagnostic/diagnostic.ts +11 -1
- package/src/diagnostic/interface.ts +13 -0
- package/src/diagnostic/sdkDiagnosticMain.ts +41 -2
- package/src/diagnostic/sdkDiagnosticPhotos.ts +47 -2
- package/src/internal/apiService/driveTypes.ts +492 -384
- package/src/internal/apiService/transformers.ts +17 -1
- package/src/internal/nodes/apiService.ts +1 -1
- package/src/internal/nodes/cryptoService.test.ts +1 -1
- package/src/internal/nodes/nodesAccess.ts +7 -2
- package/src/internal/sharing/apiService.ts +11 -3
- package/src/internal/sharingPublic/index.ts +12 -2
- package/src/internal/sharingPublic/nodes.ts +63 -4
- package/src/internal/sharingPublic/session/apiService.ts +1 -1
- package/src/internal/sharingPublic/session/interface.ts +1 -1
- package/src/internal/sharingPublic/session/manager.ts +7 -2
- package/src/protonDriveClient.ts +2 -1
- package/src/protonDrivePublicLinkClient.ts +4 -0
|
@@ -1,32 +1,11 @@
|
|
|
1
1
|
export interface PublicKey {
|
|
2
2
|
readonly _idx: any;
|
|
3
|
-
readonly _keyContentHash: [string, string];
|
|
4
|
-
getVersion(): number;
|
|
5
|
-
getFingerprint(): string;
|
|
6
|
-
getSHA256Fingerprints(): string[];
|
|
7
|
-
getKeyID(): any;
|
|
8
|
-
getKeyIDs(): any[];
|
|
9
|
-
getAlgorithmInfo(): any;
|
|
10
|
-
getCreationTime(): Date;
|
|
11
|
-
isPrivate: any;
|
|
12
|
-
isPrivateKeyV4: any;
|
|
13
|
-
isPrivateKeyV6: any;
|
|
14
|
-
getExpirationTime(): Date | number | null;
|
|
15
|
-
getUserIDs(): string[];
|
|
16
|
-
isWeak(): boolean;
|
|
17
|
-
equals(otherKey: any, ignoreOtherCerts?: boolean): boolean;
|
|
18
|
-
subkeys: {
|
|
19
|
-
getAlgorithmInfo(): any;
|
|
20
|
-
getKeyID(): any;
|
|
21
|
-
}[];
|
|
22
3
|
}
|
|
23
4
|
export interface PrivateKey extends PublicKey {
|
|
24
5
|
readonly _dummyType: 'private';
|
|
25
6
|
}
|
|
26
7
|
export interface SessionKey {
|
|
27
8
|
data: Uint8Array;
|
|
28
|
-
algorithm: any;
|
|
29
|
-
aeadAlgorithm?: any;
|
|
30
9
|
}
|
|
31
10
|
export declare enum VERIFICATION_STATUS {
|
|
32
11
|
NOT_SIGNED = 0,
|
|
@@ -66,7 +45,7 @@ export interface OpenPGPCrypto {
|
|
|
66
45
|
* 32 random bytes are generated and encoded into a base64 string.
|
|
67
46
|
*/
|
|
68
47
|
generatePassphrase: () => string;
|
|
69
|
-
generateSessionKey: (encryptionKeys:
|
|
48
|
+
generateSessionKey: (encryptionKeys: PublicKey[]) => Promise<SessionKey>;
|
|
70
49
|
encryptSessionKey: (sessionKey: SessionKey, encryptionKeys: PublicKey | PublicKey[]) => Promise<{
|
|
71
50
|
keyPacket: Uint8Array;
|
|
72
51
|
}>;
|
|
@@ -82,22 +61,22 @@ export interface OpenPGPCrypto {
|
|
|
82
61
|
privateKey: PrivateKey;
|
|
83
62
|
armoredKey: string;
|
|
84
63
|
}>;
|
|
85
|
-
encryptArmored: (data: Uint8Array, encryptionKeys:
|
|
64
|
+
encryptArmored: (data: Uint8Array, encryptionKeys: PublicKey[], sessionKey?: SessionKey) => Promise<{
|
|
86
65
|
armoredData: string;
|
|
87
66
|
}>;
|
|
88
|
-
encryptAndSign: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
67
|
+
encryptAndSign: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
|
|
89
68
|
encryptedData: Uint8Array;
|
|
90
69
|
}>;
|
|
91
|
-
encryptAndSignArmored: (data: Uint8Array, sessionKey: SessionKey | undefined, encryptionKeys:
|
|
70
|
+
encryptAndSignArmored: (data: Uint8Array, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options?: {
|
|
92
71
|
compress?: boolean;
|
|
93
72
|
}) => Promise<{
|
|
94
73
|
armoredData: string;
|
|
95
74
|
}>;
|
|
96
|
-
encryptAndSignDetached: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
75
|
+
encryptAndSignDetached: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
|
|
97
76
|
encryptedData: Uint8Array;
|
|
98
77
|
signature: Uint8Array;
|
|
99
78
|
}>;
|
|
100
|
-
encryptAndSignDetachedArmored: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
79
|
+
encryptAndSignDetachedArmored: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
|
|
101
80
|
armoredData: string;
|
|
102
81
|
armoredSignature: string;
|
|
103
82
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/crypto/interface.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/crypto/interface.ts"],"names":[],"mappings":";;;AAcA,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC3B,yEAAc,CAAA;IACd,qFAAoB,CAAA;IACpB,yFAAsB,CAAA;AAC1B,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B"}
|
|
@@ -20,7 +20,7 @@ export interface OpenPGPCryptoProxy {
|
|
|
20
20
|
passphrase: string | null;
|
|
21
21
|
}) => Promise<PrivateKey>;
|
|
22
22
|
generateSessionKey: (options: {
|
|
23
|
-
recipientKeys:
|
|
23
|
+
recipientKeys: PublicKey[];
|
|
24
24
|
}) => Promise<SessionKey>;
|
|
25
25
|
encryptSessionKey: (options: SessionKey & {
|
|
26
26
|
format: 'binary';
|
|
@@ -32,20 +32,22 @@ export interface OpenPGPCryptoProxy {
|
|
|
32
32
|
binaryMessage?: Uint8Array;
|
|
33
33
|
decryptionKeys: PrivateKey | PrivateKey[];
|
|
34
34
|
}) => Promise<SessionKey | undefined>;
|
|
35
|
-
encryptMessage: (options: {
|
|
36
|
-
format?:
|
|
35
|
+
encryptMessage: <Format extends 'armored' | 'binary' = 'armored', Detached extends boolean = false>(options: {
|
|
36
|
+
format?: Format;
|
|
37
37
|
binaryData: Uint8Array;
|
|
38
38
|
sessionKey?: SessionKey;
|
|
39
|
-
encryptionKeys:
|
|
39
|
+
encryptionKeys: PublicKey[];
|
|
40
40
|
signingKeys?: PrivateKey;
|
|
41
|
-
detached?:
|
|
41
|
+
detached?: Detached;
|
|
42
42
|
compress?: boolean;
|
|
43
|
-
}) => Promise<{
|
|
44
|
-
message:
|
|
45
|
-
signature
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
}) => Promise<Detached extends true ? {
|
|
44
|
+
message: Format extends 'binary' ? Uint8Array : string;
|
|
45
|
+
signature: Format extends 'binary' ? Uint8Array : string;
|
|
46
|
+
} : {
|
|
47
|
+
message: Format extends 'binary' ? Uint8Array : string;
|
|
48
|
+
}>;
|
|
49
|
+
decryptMessage: <Format extends 'utf8' | 'binary' = 'utf8'>(options: {
|
|
50
|
+
format: Format;
|
|
49
51
|
armoredMessage?: string;
|
|
50
52
|
binaryMessage?: Uint8Array;
|
|
51
53
|
armoredSignature?: string;
|
|
@@ -55,13 +57,12 @@ export interface OpenPGPCryptoProxy {
|
|
|
55
57
|
decryptionKeys?: PrivateKey | PrivateKey[];
|
|
56
58
|
verificationKeys?: PublicKey | PublicKey[];
|
|
57
59
|
}) => Promise<{
|
|
58
|
-
data: Uint8Array
|
|
59
|
-
|
|
60
|
-
verificationStatus?: VERIFICATION_STATUS;
|
|
60
|
+
data: Format extends 'binary' ? Uint8Array : string;
|
|
61
|
+
verificationStatus: VERIFICATION_STATUS;
|
|
61
62
|
verificationErrors?: Error[];
|
|
62
63
|
}>;
|
|
63
|
-
signMessage: (options: {
|
|
64
|
-
format:
|
|
64
|
+
signMessage: <Format extends 'binary' | 'armored' = 'armored'>(options: {
|
|
65
|
+
format: Format;
|
|
65
66
|
binaryData: Uint8Array;
|
|
66
67
|
signingKeys: PrivateKey | PrivateKey[];
|
|
67
68
|
detached: boolean;
|
|
@@ -69,7 +70,7 @@ export interface OpenPGPCryptoProxy {
|
|
|
69
70
|
critical: boolean;
|
|
70
71
|
value: string;
|
|
71
72
|
};
|
|
72
|
-
}) => Promise<Uint8Array
|
|
73
|
+
}) => Promise<Format extends 'binary' ? Uint8Array : string>;
|
|
73
74
|
verifyMessage: (options: {
|
|
74
75
|
binaryData: Uint8Array;
|
|
75
76
|
armoredSignature?: string;
|
|
@@ -80,8 +81,7 @@ export interface OpenPGPCryptoProxy {
|
|
|
80
81
|
value: string;
|
|
81
82
|
};
|
|
82
83
|
}) => Promise<{
|
|
83
|
-
|
|
84
|
-
verificationStatus?: VERIFICATION_STATUS;
|
|
84
|
+
verificationStatus: VERIFICATION_STATUS;
|
|
85
85
|
errors?: Error[];
|
|
86
86
|
}>;
|
|
87
87
|
}
|
|
@@ -94,7 +94,7 @@ export declare class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
94
94
|
private cryptoProxy;
|
|
95
95
|
constructor(cryptoProxy: OpenPGPCryptoProxy);
|
|
96
96
|
generatePassphrase(): string;
|
|
97
|
-
generateSessionKey(encryptionKeys:
|
|
97
|
+
generateSessionKey(encryptionKeys: PublicKey[]): Promise<SessionKey>;
|
|
98
98
|
encryptSessionKey(sessionKey: SessionKey, encryptionKeys: PublicKey | PublicKey[]): Promise<{
|
|
99
99
|
keyPacket: Uint8Array;
|
|
100
100
|
}>;
|
|
@@ -105,22 +105,22 @@ export declare class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
|
|
|
105
105
|
armoredKey: string;
|
|
106
106
|
privateKey: PrivateKey;
|
|
107
107
|
}>;
|
|
108
|
-
encryptArmored(data: Uint8Array, encryptionKeys:
|
|
108
|
+
encryptArmored(data: Uint8Array, encryptionKeys: PublicKey[], sessionKey?: SessionKey): Promise<{
|
|
109
109
|
armoredData: string;
|
|
110
110
|
}>;
|
|
111
|
-
encryptAndSign(data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
111
|
+
encryptAndSign(data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
|
|
112
112
|
encryptedData: Uint8Array;
|
|
113
113
|
}>;
|
|
114
|
-
encryptAndSignArmored(data: Uint8Array, sessionKey: SessionKey | undefined, encryptionKeys:
|
|
114
|
+
encryptAndSignArmored(data: Uint8Array, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options?: {
|
|
115
115
|
compress?: boolean;
|
|
116
116
|
}): Promise<{
|
|
117
117
|
armoredData: string;
|
|
118
118
|
}>;
|
|
119
|
-
encryptAndSignDetached(data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
119
|
+
encryptAndSignDetached(data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
|
|
120
120
|
encryptedData: Uint8Array;
|
|
121
121
|
signature: Uint8Array;
|
|
122
122
|
}>;
|
|
123
|
-
encryptAndSignDetachedArmored(data: Uint8Array, sessionKey: SessionKey, encryptionKeys:
|
|
123
|
+
encryptAndSignDetachedArmored(data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
|
|
124
124
|
armoredData: string;
|
|
125
125
|
armoredSignature: string;
|
|
126
126
|
}>;
|
|
@@ -145,29 +145,25 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
145
145
|
};
|
|
146
146
|
}
|
|
147
147
|
async verify(data, signature, verificationKeys) {
|
|
148
|
-
const {
|
|
148
|
+
const { verificationStatus, errors } = await this.cryptoProxy.verifyMessage({
|
|
149
149
|
binaryData: data,
|
|
150
150
|
binarySignature: signature,
|
|
151
151
|
verificationKeys,
|
|
152
152
|
});
|
|
153
153
|
return {
|
|
154
|
-
|
|
155
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
156
|
-
verified: verified || verificationStatus,
|
|
154
|
+
verified: verificationStatus,
|
|
157
155
|
verificationErrors: errors,
|
|
158
156
|
};
|
|
159
157
|
}
|
|
160
158
|
async verifyArmored(data, armoredSignature, verificationKeys, signatureContext) {
|
|
161
|
-
const {
|
|
159
|
+
const { verificationStatus, errors } = await this.cryptoProxy.verifyMessage({
|
|
162
160
|
binaryData: data,
|
|
163
161
|
armoredSignature,
|
|
164
162
|
verificationKeys,
|
|
165
163
|
signatureContext: signatureContext ? { critical: true, value: signatureContext } : undefined,
|
|
166
164
|
});
|
|
167
165
|
return {
|
|
168
|
-
|
|
169
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
170
|
-
verified: verified || verificationStatus,
|
|
166
|
+
verified: verificationStatus,
|
|
171
167
|
verificationErrors: errors,
|
|
172
168
|
};
|
|
173
169
|
}
|
|
@@ -199,7 +195,7 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
199
195
|
return key;
|
|
200
196
|
}
|
|
201
197
|
async decryptAndVerify(data, sessionKey, verificationKeys) {
|
|
202
|
-
const { data: decryptedData,
|
|
198
|
+
const { data: decryptedData, verificationStatus, verificationErrors, } = await this.cryptoProxy.decryptMessage({
|
|
203
199
|
binaryMessage: data,
|
|
204
200
|
sessionKeys: sessionKey,
|
|
205
201
|
verificationKeys,
|
|
@@ -207,14 +203,12 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
207
203
|
});
|
|
208
204
|
return {
|
|
209
205
|
data: decryptedData,
|
|
210
|
-
|
|
211
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
212
|
-
verified: verified || verificationStatus,
|
|
206
|
+
verified: verificationStatus,
|
|
213
207
|
verificationErrors,
|
|
214
208
|
};
|
|
215
209
|
}
|
|
216
210
|
async decryptAndVerifyDetached(data, signature, sessionKey, verificationKeys) {
|
|
217
|
-
const { data: decryptedData,
|
|
211
|
+
const { data: decryptedData, verificationStatus, verificationErrors, } = await this.cryptoProxy.decryptMessage({
|
|
218
212
|
binaryMessage: data,
|
|
219
213
|
binarySignature: signature,
|
|
220
214
|
sessionKeys: sessionKey,
|
|
@@ -223,9 +217,7 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
223
217
|
});
|
|
224
218
|
return {
|
|
225
219
|
data: decryptedData,
|
|
226
|
-
|
|
227
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
228
|
-
verified: verified || verificationStatus,
|
|
220
|
+
verified: verificationStatus,
|
|
229
221
|
verificationErrors,
|
|
230
222
|
};
|
|
231
223
|
}
|
|
@@ -238,7 +230,7 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
238
230
|
return data;
|
|
239
231
|
}
|
|
240
232
|
async decryptArmoredAndVerify(armoredData, decryptionKeys, verificationKeys) {
|
|
241
|
-
const { data,
|
|
233
|
+
const { data, verificationStatus, verificationErrors } = await this.cryptoProxy.decryptMessage({
|
|
242
234
|
armoredMessage: armoredData,
|
|
243
235
|
decryptionKeys,
|
|
244
236
|
verificationKeys,
|
|
@@ -246,14 +238,12 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
246
238
|
});
|
|
247
239
|
return {
|
|
248
240
|
data: data,
|
|
249
|
-
|
|
250
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
251
|
-
verified: verified || verificationStatus,
|
|
241
|
+
verified: verificationStatus,
|
|
252
242
|
verificationErrors,
|
|
253
243
|
};
|
|
254
244
|
}
|
|
255
245
|
async decryptArmoredAndVerifyDetached(armoredData, armoredSignature, sessionKey, verificationKeys) {
|
|
256
|
-
const { data,
|
|
246
|
+
const { data, verificationStatus, verificationErrors } = await this.cryptoProxy.decryptMessage({
|
|
257
247
|
armoredMessage: armoredData,
|
|
258
248
|
armoredSignature,
|
|
259
249
|
sessionKeys: sessionKey,
|
|
@@ -262,9 +252,7 @@ class OpenPGPCryptoWithCryptoProxy {
|
|
|
262
252
|
});
|
|
263
253
|
return {
|
|
264
254
|
data: data,
|
|
265
|
-
|
|
266
|
-
// Proper typing is too complex, it will be removed to support only newer pmcrypto.
|
|
267
|
-
verified: verified || verificationStatus,
|
|
255
|
+
verified: verificationStatus,
|
|
268
256
|
verificationErrors: !armoredSignature
|
|
269
257
|
? [new Error((0, ttag_1.c)('Error').t `Signature is missing`)]
|
|
270
258
|
: verificationErrors,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openPGPCrypto.js","sourceRoot":"","sources":["../../src/crypto/openPGPCrypto.ts"],"names":[],"mappings":";;;AAAA,+BAAyB;
|
|
1
|
+
{"version":3,"file":"openPGPCrypto.js","sourceRoot":"","sources":["../../src/crypto/openPGPCrypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { MaybeNode } from '../interface';
|
|
|
2
2
|
import { ProtonDriveClient } from '../protonDriveClient';
|
|
3
3
|
import { ProtonDrivePhotosClient } from '../protonDrivePhotosClient';
|
|
4
4
|
import { DiagnosticHTTPClient } from './httpClient';
|
|
5
|
-
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult } from './interface';
|
|
5
|
+
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult, TreeNode } from './interface';
|
|
6
6
|
import { DiagnosticTelemetry } from './telemetry';
|
|
7
7
|
/**
|
|
8
8
|
* Diagnostic tool that produces full diagnostic, including logs and metrics
|
|
@@ -19,4 +19,6 @@ export declare class Diagnostic {
|
|
|
19
19
|
verifyPhotosTimeline(options?: DiagnosticOptions, onProgress?: DiagnosticProgressCallback): AsyncGenerator<DiagnosticResult>;
|
|
20
20
|
private yieldEvents;
|
|
21
21
|
private internalGenerator;
|
|
22
|
+
getNodeTreeStructure(node: MaybeNode): Promise<TreeNode>;
|
|
23
|
+
getPhotosTimelineStructure(): Promise<TreeNode>;
|
|
22
24
|
}
|
|
@@ -41,6 +41,14 @@ class Diagnostic {
|
|
|
41
41
|
async *internalGenerator() {
|
|
42
42
|
yield* (0, zipGenerators_1.zipGenerators)(this.telemetry.iterateEvents(), this.httpClient.iterateEvents());
|
|
43
43
|
}
|
|
44
|
+
async getNodeTreeStructure(node) {
|
|
45
|
+
const diagnostic = new sdkDiagnosticMain_1.SDKDiagnosticMain(this.protonDriveClient);
|
|
46
|
+
return diagnostic.getStructure(node);
|
|
47
|
+
}
|
|
48
|
+
async getPhotosTimelineStructure() {
|
|
49
|
+
const diagnostic = new sdkDiagnosticPhotos_1.SDKDiagnosticPhotos(this.protonDrivePhotosClient);
|
|
50
|
+
return diagnostic.getStructure();
|
|
51
|
+
}
|
|
44
52
|
}
|
|
45
53
|
exports.Diagnostic = Diagnostic;
|
|
46
54
|
//# sourceMappingURL=diagnostic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../src/diagnostic/diagnostic.ts"],"names":[],"mappings":";;;AAKA,2DAAwD;AACxD,+DAA4D;AAE5D,mDAAgD;AAEhD;;;GAGG;AACH,MAAa,UAAU;IAEP;IACA;IACA;IACA;IAJZ,YACY,SAA8B,EAC9B,UAAgC,EAChC,iBAAoC,EACpC,uBAAgD;QAHhD,cAAS,GAAT,SAAS,CAAqB;QAC9B,eAAU,GAAV,UAAU,CAAsB;QAChC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAExD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAChB,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACtF,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CACjB,IAAe,EACf,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACtF,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,CAAC,oBAAoB,CACvB,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,yCAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9F,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,KAAK,CAAC,CAAC,WAAW,CAAC,SAA2C;QAClE,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IAEO,KAAK,CAAC,CAAC,iBAAiB;QAC5B,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1F,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../src/diagnostic/diagnostic.ts"],"names":[],"mappings":";;;AAKA,2DAAwD;AACxD,+DAA4D;AAE5D,mDAAgD;AAEhD;;;GAGG;AACH,MAAa,UAAU;IAEP;IACA;IACA;IACA;IAJZ,YACY,SAA8B,EAC9B,UAAgC,EAChC,iBAAoC,EACpC,uBAAgD;QAHhD,cAAS,GAAT,SAAS,CAAqB;QAC9B,eAAU,GAAV,UAAU,CAAsB;QAChC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAExD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAChB,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACtF,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CACjB,IAAe,EACf,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACtF,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,CAAC,oBAAoB,CACvB,OAA2B,EAC3B,UAAuC;QAEvC,MAAM,UAAU,GAAG,IAAI,yCAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9F,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,KAAK,CAAC,CAAC,WAAW,CAAC,SAA2C;QAClE,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IAEO,KAAK,CAAC,CAAC,iBAAiB;QAC5B,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAe;QACtC,MAAM,UAAU,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjE,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC5B,MAAM,UAAU,GAAG,IAAI,yCAAmB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzE,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;CACJ;AAvDD,gCAuDC"}
|
|
@@ -4,6 +4,8 @@ export interface Diagnostic {
|
|
|
4
4
|
verifyMyFiles(options?: DiagnosticOptions, onProgress?: DiagnosticProgressCallback): AsyncGenerator<DiagnosticResult>;
|
|
5
5
|
verifyNodeTree(node: MaybeNode, options?: DiagnosticOptions, onProgress?: DiagnosticProgressCallback): AsyncGenerator<DiagnosticResult>;
|
|
6
6
|
verifyPhotosTimeline(options?: DiagnosticOptions, onProgress?: DiagnosticProgressCallback): AsyncGenerator<DiagnosticResult>;
|
|
7
|
+
getNodeTreeStructure(node: MaybeNode): Promise<TreeNode>;
|
|
8
|
+
getPhotosTimelineStructure(): Promise<TreeNode>;
|
|
7
9
|
}
|
|
8
10
|
export type DiagnosticOptions = {
|
|
9
11
|
verifyContent?: boolean | 'peakOnly';
|
|
@@ -22,6 +24,15 @@ export type ExpectedTreeNode = {
|
|
|
22
24
|
};
|
|
23
25
|
children?: ExpectedTreeNode[];
|
|
24
26
|
};
|
|
27
|
+
export type TreeNode = {
|
|
28
|
+
uid: string;
|
|
29
|
+
type: NodeType;
|
|
30
|
+
error?: unknown;
|
|
31
|
+
name: string;
|
|
32
|
+
claimedSha1?: string;
|
|
33
|
+
claimedSizeInBytes?: number;
|
|
34
|
+
children?: TreeNode[];
|
|
35
|
+
};
|
|
25
36
|
export type ExpectedAuthor = string | 'anonymous';
|
|
26
37
|
export type DiagnosticProgressCallback = (progress: {
|
|
27
38
|
allNodesLoaded: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MaybeNode } from '../interface';
|
|
2
2
|
import { ProtonDriveClient } from '../protonDriveClient';
|
|
3
|
-
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult, ExpectedTreeNode } from './interface';
|
|
3
|
+
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult, ExpectedTreeNode, TreeNode } from './interface';
|
|
4
4
|
import { SDKDiagnosticBase } from './sdkDiagnosticBase';
|
|
5
5
|
/**
|
|
6
6
|
* Diagnostic tool that uses the main Drive SDK to traverse and verify
|
|
@@ -13,4 +13,5 @@ export declare class SDKDiagnosticMain extends SDKDiagnosticBase {
|
|
|
13
13
|
verifyNodeTree(node: MaybeNode, expectedStructure?: ExpectedTreeNode): AsyncGenerator<DiagnosticResult>;
|
|
14
14
|
private loadNodeTree;
|
|
15
15
|
private loadNodeTreeRecursively;
|
|
16
|
+
getStructure(node: MaybeNode): Promise<TreeNode>;
|
|
16
17
|
}
|
|
@@ -74,6 +74,34 @@ class SDKDiagnosticMain extends sdkDiagnosticBase_1.SDKDiagnosticBase {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
async getStructure(node) {
|
|
78
|
+
const nodeType = (0, nodeUtils_1.getNodeType)(node);
|
|
79
|
+
const treeNode = {
|
|
80
|
+
uid: node.ok ? node.value.uid : node.error.uid,
|
|
81
|
+
type: nodeType,
|
|
82
|
+
name: (0, nodeUtils_1.getNodeName)(node),
|
|
83
|
+
};
|
|
84
|
+
if (!node.ok) {
|
|
85
|
+
treeNode.error = node.error || 'degraded node';
|
|
86
|
+
}
|
|
87
|
+
if (nodeType === interface_1.NodeType.Folder) {
|
|
88
|
+
const children = [];
|
|
89
|
+
for await (const child of this.protonDriveClient.iterateFolderChildren(node)) {
|
|
90
|
+
children.push(child);
|
|
91
|
+
}
|
|
92
|
+
treeNode.children = [];
|
|
93
|
+
for (const child of children) {
|
|
94
|
+
const childStructure = await this.getStructure(child);
|
|
95
|
+
treeNode.children.push(childStructure);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (nodeType === interface_1.NodeType.File) {
|
|
99
|
+
const activeRevision = (0, nodeUtils_1.getActiveRevision)(node);
|
|
100
|
+
treeNode.claimedSha1 = activeRevision?.claimedDigests?.sha1;
|
|
101
|
+
treeNode.claimedSizeInBytes = activeRevision?.claimedSize;
|
|
102
|
+
}
|
|
103
|
+
return treeNode;
|
|
104
|
+
}
|
|
77
105
|
}
|
|
78
106
|
exports.SDKDiagnosticMain = SDKDiagnosticMain;
|
|
79
107
|
//# sourceMappingURL=sdkDiagnosticMain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkDiagnosticMain.js","sourceRoot":"","sources":["../../src/diagnostic/sdkDiagnosticMain.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;
|
|
1
|
+
{"version":3,"file":"sdkDiagnosticMain.js","sourceRoot":"","sources":["../../src/diagnostic/sdkDiagnosticMain.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;AASnD,mDAAgD;AAChD,2CAAsG;AACtG,2DAAwD;AAExD;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,qCAAiB;IAExC;IADZ,YACY,iBAAoC,EAC5C,OAAuE,EACvE,UAAuC;QAEvC,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAJtC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAK5C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAAC,iBAAoC;QACrD,IAAI,iBAA4B,CAAC;QAEjC,IAAI,CAAC;YACD,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM;gBACF,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,oCAAoC;gBAC7C,KAAK;aACR,CAAC;YACF,OAAO;QACX,CAAC;QAED,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CAAC,IAAe,EAAE,iBAAoC;QACvE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,CAAC,YAAY,CACvB,UAAqB,EACrB,iBAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAC,UAAU,CAAC,KAAK,oBAAQ,CAAC,MAAM,CAAC;QAC7D,IAAI,QAAQ,EAAE,CAAC;YACX,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,CAAC,uBAAuB,CAClC,UAAqB,EACrB,iBAAoC;QAEpC,MAAM,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAClF,MAAM,QAAQ,GAAgB,EAAE,CAAC;QAEjC,IAAI,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAA,sCAA0B,EAAC,iBAAiB,EAAE,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;iBAC9E,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM;gBACF,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,yBAAyB,aAAa,GAAG;gBAC/C,KAAK;aACR,CAAC;QACN,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACpB,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACvF,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,IAAA,uBAAW,EAAC,KAAK,CAAC,KAAK,oBAAQ,CAAC,MAAM,EAAE,CAAC;gBACzC,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAC/B,KAAK,EACL,IAAA,sCAA0B,EAAC,iBAAiB,EAAE,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC,CACpE,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAe;QAC9B,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAa;YACvB,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;YAC9C,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAA,uBAAW,EAAC,IAAI,CAAC;SAC1B,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC;QACnD,CAAC;QAED,IAAI,QAAQ,KAAK,oBAAQ,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC;YAEpB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,KAAK,oBAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC;YAC/C,QAAQ,CAAC,WAAW,GAAG,cAAc,EAAE,cAAc,EAAE,IAAI,CAAC;YAC5D,QAAQ,CAAC,kBAAkB,GAAG,cAAc,EAAE,WAAW,CAAC;QAC9D,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AApHD,8CAoHC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ProtonDrivePhotosClient } from '../protonDrivePhotosClient';
|
|
2
|
-
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult, ExpectedTreeNode } from './interface';
|
|
2
|
+
import { DiagnosticOptions, DiagnosticProgressCallback, DiagnosticResult, ExpectedTreeNode, TreeNode } from './interface';
|
|
3
3
|
import { SDKDiagnosticBase } from './sdkDiagnosticBase';
|
|
4
4
|
/**
|
|
5
5
|
* Diagnostic tool that uses the Photos SDK to traverse and verify
|
|
@@ -10,4 +10,5 @@ export declare class SDKDiagnosticPhotos extends SDKDiagnosticBase {
|
|
|
10
10
|
constructor(protonDrivePhotosClient: ProtonDrivePhotosClient, options?: Pick<DiagnosticOptions, 'verifyContent' | 'verifyThumbnails'>, onProgress?: DiagnosticProgressCallback);
|
|
11
11
|
verifyTimeline(expectedStructure?: ExpectedTreeNode): AsyncGenerator<DiagnosticResult>;
|
|
12
12
|
private loadTimeline;
|
|
13
|
+
getStructure(): Promise<TreeNode>;
|
|
13
14
|
}
|
|
@@ -60,6 +60,37 @@ class SDKDiagnosticPhotos extends sdkDiagnosticBase_1.SDKDiagnosticBase {
|
|
|
60
60
|
}
|
|
61
61
|
this.allNodesLoaded = true;
|
|
62
62
|
}
|
|
63
|
+
async getStructure() {
|
|
64
|
+
const myPhotosRootFolder = await this.protonDrivePhotosClient.getMyPhotosRootFolder();
|
|
65
|
+
const treeNode = {
|
|
66
|
+
uid: myPhotosRootFolder.ok ? myPhotosRootFolder.value.uid : myPhotosRootFolder.error.uid,
|
|
67
|
+
type: (0, nodeUtils_1.getNodeType)(myPhotosRootFolder),
|
|
68
|
+
name: (0, nodeUtils_1.getNodeName)(myPhotosRootFolder),
|
|
69
|
+
};
|
|
70
|
+
const children = [];
|
|
71
|
+
const results = await Array.fromAsync(this.protonDrivePhotosClient.iterateTimeline());
|
|
72
|
+
const nodeUids = results.map((result) => result.nodeUid);
|
|
73
|
+
for await (const maybeMissingNode of this.protonDrivePhotosClient.iterateNodes(nodeUids)) {
|
|
74
|
+
if (!maybeMissingNode.ok && 'missingUid' in maybeMissingNode.error) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const node = maybeMissingNode;
|
|
78
|
+
const activeRevision = (0, nodeUtils_1.getActiveRevision)(node);
|
|
79
|
+
const childNode = {
|
|
80
|
+
uid: node.ok ? node.value.uid : node.error.uid,
|
|
81
|
+
name: (0, nodeUtils_1.getNodeName)(node),
|
|
82
|
+
type: (0, nodeUtils_1.getNodeType)(node),
|
|
83
|
+
claimedSha1: activeRevision?.claimedDigests?.sha1,
|
|
84
|
+
claimedSizeInBytes: activeRevision?.claimedSize,
|
|
85
|
+
};
|
|
86
|
+
if (!node.ok) {
|
|
87
|
+
childNode.error = node.error || 'degraded node';
|
|
88
|
+
}
|
|
89
|
+
children.push(childNode);
|
|
90
|
+
}
|
|
91
|
+
treeNode.children = children;
|
|
92
|
+
return treeNode;
|
|
93
|
+
}
|
|
63
94
|
}
|
|
64
95
|
exports.SDKDiagnosticPhotos = SDKDiagnosticPhotos;
|
|
65
96
|
//# sourceMappingURL=sdkDiagnosticPhotos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkDiagnosticPhotos.js","sourceRoot":"","sources":["../../src/diagnostic/sdkDiagnosticPhotos.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sdkDiagnosticPhotos.js","sourceRoot":"","sources":["../../src/diagnostic/sdkDiagnosticPhotos.ts"],"names":[],"mappings":";;;AASA,mDAAgD;AAChD,2CAAsG;AACtG,2DAAwD;AAExD;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,qCAAiB;IAE1C;IADZ,YACY,uBAAgD,EACxD,OAAuE,EACvE,UAAuC;QAEvC,KAAK,CAAC,uBAAuB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAJ5C,4BAAuB,GAAvB,uBAAuB,CAAyB;QAKxD,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAoC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,CAAC,YAAY,CAAC,iBAAoC;QAC5D,IAAI,QAAQ,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC,CAAC;YACtF,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM;gBACF,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,mBAAmB;gBACzB,KAAK;aACR,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,gBAAgB,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvF,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,YAAY,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACjE,SAAS;gBACb,CAAC;gBACD,MAAM,SAAS,GAAG,gBAA6B,CAAC;gBAEhD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,IAAA,sCAA0B,EAAC,iBAAiB,EAAE,IAAA,uBAAW,EAAC,SAAS,CAAC,CAAC;iBAClF,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM;gBACF,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,mBAAmB;gBACzB,KAAK;aACR,CAAC;QACN,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACpB,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,CAAC;QAEtF,MAAM,QAAQ,GAAa;YACvB,GAAG,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG;YACxF,IAAI,EAAE,IAAA,uBAAW,EAAC,kBAAkB,CAAC;YACrC,IAAI,EAAE,IAAA,uBAAW,EAAC,kBAAkB,CAAC;SACxC,CAAC;QACF,MAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,KAAK,EAAE,MAAM,gBAAgB,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,YAAY,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBACjE,SAAS;YACb,CAAC;YACD,MAAM,IAAI,GAAG,gBAA6B,CAAC;YAE3C,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAa;gBACxB,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;gBAC9C,IAAI,EAAE,IAAA,uBAAW,EAAC,IAAI,CAAC;gBACvB,IAAI,EAAE,IAAA,uBAAW,EAAC,IAAI,CAAC;gBACvB,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI;gBACjD,kBAAkB,EAAE,cAAc,EAAE,WAAW;aAClD,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACX,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC;YACpD,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAjGD,kDAiGC"}
|