@protontech/drive-sdk 0.5.1 → 0.6.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.
Files changed (201) hide show
  1. package/dist/diagnostic/diagnostic.d.ts +7 -4
  2. package/dist/diagnostic/diagnostic.js +16 -8
  3. package/dist/diagnostic/diagnostic.js.map +1 -1
  4. package/dist/diagnostic/index.d.ts +1 -1
  5. package/dist/diagnostic/index.js +9 -1
  6. package/dist/diagnostic/index.js.map +1 -1
  7. package/dist/diagnostic/interface.d.ts +24 -9
  8. package/dist/diagnostic/nodeUtils.d.ts +13 -0
  9. package/dist/diagnostic/nodeUtils.js +90 -0
  10. package/dist/diagnostic/nodeUtils.js.map +1 -0
  11. package/dist/diagnostic/sdkDiagnosticBase.d.ts +36 -0
  12. package/dist/diagnostic/sdkDiagnosticBase.js +305 -0
  13. package/dist/diagnostic/sdkDiagnosticBase.js.map +1 -0
  14. package/dist/diagnostic/sdkDiagnosticMain.d.ts +16 -0
  15. package/dist/diagnostic/sdkDiagnosticMain.js +79 -0
  16. package/dist/diagnostic/sdkDiagnosticMain.js.map +1 -0
  17. package/dist/diagnostic/sdkDiagnosticPhotos.d.ts +13 -0
  18. package/dist/diagnostic/sdkDiagnosticPhotos.js +65 -0
  19. package/dist/diagnostic/sdkDiagnosticPhotos.js.map +1 -0
  20. package/dist/interface/index.d.ts +1 -1
  21. package/dist/interface/upload.d.ts +1 -12
  22. package/dist/internal/devices/interface.d.ts +1 -1
  23. package/dist/internal/devices/manager.js +1 -1
  24. package/dist/internal/devices/manager.js.map +1 -1
  25. package/dist/internal/devices/manager.test.js +3 -3
  26. package/dist/internal/devices/manager.test.js.map +1 -1
  27. package/dist/internal/errors.d.ts +5 -0
  28. package/dist/internal/errors.js +23 -0
  29. package/dist/internal/errors.js.map +1 -1
  30. package/dist/internal/errors.test.js +53 -2
  31. package/dist/internal/errors.test.js.map +1 -1
  32. package/dist/internal/nodes/apiService.d.ts +11 -1
  33. package/dist/internal/nodes/apiService.js +20 -1
  34. package/dist/internal/nodes/apiService.js.map +1 -1
  35. package/dist/internal/nodes/apiService.test.js +1 -1
  36. package/dist/internal/nodes/apiService.test.js.map +1 -1
  37. package/dist/internal/nodes/cryptoReporter.js +3 -0
  38. package/dist/internal/nodes/cryptoReporter.js.map +1 -1
  39. package/dist/internal/nodes/cryptoService.d.ts +4 -0
  40. package/dist/internal/nodes/cryptoService.js +6 -0
  41. package/dist/internal/nodes/cryptoService.js.map +1 -1
  42. package/dist/internal/nodes/index.d.ts +1 -1
  43. package/dist/internal/nodes/index.js +2 -2
  44. package/dist/internal/nodes/index.js.map +1 -1
  45. package/dist/internal/nodes/index.test.js +2 -2
  46. package/dist/internal/nodes/index.test.js.map +1 -1
  47. package/dist/internal/nodes/interface.d.ts +1 -1
  48. package/dist/internal/nodes/nodeName.d.ts +8 -0
  49. package/dist/internal/nodes/nodeName.js +30 -0
  50. package/dist/internal/nodes/nodeName.js.map +1 -0
  51. package/dist/internal/nodes/nodeName.test.d.ts +1 -0
  52. package/dist/internal/nodes/nodeName.test.js +50 -0
  53. package/dist/internal/nodes/nodeName.test.js.map +1 -0
  54. package/dist/internal/nodes/nodesAccess.d.ts +1 -1
  55. package/dist/internal/nodes/nodesAccess.js +4 -4
  56. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  57. package/dist/internal/nodes/nodesAccess.test.js +2 -2
  58. package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
  59. package/dist/internal/nodes/nodesManagement.d.ts +1 -0
  60. package/dist/internal/nodes/nodesManagement.js +30 -1
  61. package/dist/internal/nodes/nodesManagement.js.map +1 -1
  62. package/dist/internal/nodes/nodesManagement.test.js +61 -0
  63. package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
  64. package/dist/internal/photos/albums.js +1 -1
  65. package/dist/internal/photos/albums.js.map +1 -1
  66. package/dist/internal/photos/apiService.d.ts +6 -0
  67. package/dist/internal/photos/apiService.js +16 -0
  68. package/dist/internal/photos/apiService.js.map +1 -1
  69. package/dist/internal/photos/index.d.ts +3 -1
  70. package/dist/internal/photos/index.js +6 -2
  71. package/dist/internal/photos/index.js.map +1 -1
  72. package/dist/internal/photos/interface.d.ts +4 -1
  73. package/dist/internal/photos/shares.d.ts +1 -1
  74. package/dist/internal/photos/shares.js +3 -3
  75. package/dist/internal/photos/shares.js.map +1 -1
  76. package/dist/internal/photos/timeline.d.ts +8 -1
  77. package/dist/internal/photos/timeline.js +36 -2
  78. package/dist/internal/photos/timeline.js.map +1 -1
  79. package/dist/internal/photos/timeline.test.d.ts +1 -0
  80. package/dist/internal/photos/timeline.test.js +99 -0
  81. package/dist/internal/photos/timeline.test.js.map +1 -0
  82. package/dist/internal/shares/cryptoService.js +3 -0
  83. package/dist/internal/shares/cryptoService.js.map +1 -1
  84. package/dist/internal/shares/index.d.ts +1 -0
  85. package/dist/internal/shares/index.js +3 -0
  86. package/dist/internal/shares/index.js.map +1 -1
  87. package/dist/internal/shares/interface.d.ts +8 -0
  88. package/dist/internal/shares/interface.js +10 -1
  89. package/dist/internal/shares/interface.js.map +1 -1
  90. package/dist/internal/shares/manager.d.ts +1 -1
  91. package/dist/internal/shares/manager.js +4 -4
  92. package/dist/internal/shares/manager.js.map +1 -1
  93. package/dist/internal/shares/manager.test.js +7 -7
  94. package/dist/internal/shares/manager.test.js.map +1 -1
  95. package/dist/internal/sharing/apiService.d.ts +3 -1
  96. package/dist/internal/sharing/apiService.js +16 -12
  97. package/dist/internal/sharing/apiService.js.map +1 -1
  98. package/dist/internal/sharing/index.d.ts +2 -1
  99. package/dist/internal/sharing/index.js +6 -2
  100. package/dist/internal/sharing/index.js.map +1 -1
  101. package/dist/internal/sharing/interface.d.ts +1 -1
  102. package/dist/internal/sharing/sharingAccess.js +1 -1
  103. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  104. package/dist/internal/sharing/sharingAccess.test.js +1 -1
  105. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  106. package/dist/internal/sharing/sharingManagement.js +32 -14
  107. package/dist/internal/sharing/sharingManagement.js.map +1 -1
  108. package/dist/internal/sharing/sharingManagement.test.js +46 -1
  109. package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
  110. package/dist/internal/sharingPublic/cryptoReporter.js +3 -0
  111. package/dist/internal/sharingPublic/cryptoReporter.js.map +1 -1
  112. package/dist/internal/sharingPublic/index.d.ts +3 -0
  113. package/dist/internal/sharingPublic/index.js +5 -1
  114. package/dist/internal/sharingPublic/index.js.map +1 -1
  115. package/dist/internal/sharingPublic/shares.d.ts +1 -1
  116. package/dist/internal/sharingPublic/shares.js +1 -2
  117. package/dist/internal/sharingPublic/shares.js.map +1 -1
  118. package/dist/internal/upload/apiService.d.ts +0 -9
  119. package/dist/internal/upload/apiService.js +0 -16
  120. package/dist/internal/upload/apiService.js.map +1 -1
  121. package/dist/internal/upload/cryptoService.d.ts +0 -4
  122. package/dist/internal/upload/cryptoService.js +0 -6
  123. package/dist/internal/upload/cryptoService.js.map +1 -1
  124. package/dist/internal/upload/fileUploader.d.ts +0 -1
  125. package/dist/internal/upload/fileUploader.js +0 -4
  126. package/dist/internal/upload/fileUploader.js.map +1 -1
  127. package/dist/internal/upload/manager.d.ts +0 -1
  128. package/dist/internal/upload/manager.js +0 -51
  129. package/dist/internal/upload/manager.js.map +1 -1
  130. package/dist/internal/upload/manager.test.js +0 -61
  131. package/dist/internal/upload/manager.test.js.map +1 -1
  132. package/dist/protonDriveClient.d.ts +17 -2
  133. package/dist/protonDriveClient.js +19 -1
  134. package/dist/protonDriveClient.js.map +1 -1
  135. package/dist/protonDrivePhotosClient.d.ts +119 -4
  136. package/dist/protonDrivePhotosClient.js +183 -10
  137. package/dist/protonDrivePhotosClient.js.map +1 -1
  138. package/dist/protonDrivePublicLinkClient.d.ts +33 -1
  139. package/dist/protonDrivePublicLinkClient.js +51 -2
  140. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  141. package/package.json +1 -1
  142. package/src/diagnostic/diagnostic.ts +27 -8
  143. package/src/diagnostic/index.ts +17 -2
  144. package/src/diagnostic/interface.ts +35 -9
  145. package/src/diagnostic/nodeUtils.ts +100 -0
  146. package/src/diagnostic/{sdkDiagnostic.ts → sdkDiagnosticBase.ts} +204 -204
  147. package/src/diagnostic/sdkDiagnosticMain.ts +95 -0
  148. package/src/diagnostic/sdkDiagnosticPhotos.ts +70 -0
  149. package/src/interface/index.ts +1 -1
  150. package/src/interface/upload.ts +1 -13
  151. package/src/internal/devices/interface.ts +1 -1
  152. package/src/internal/devices/manager.test.ts +3 -3
  153. package/src/internal/devices/manager.ts +1 -1
  154. package/src/internal/errors.test.ts +62 -1
  155. package/src/internal/errors.ts +27 -0
  156. package/src/internal/nodes/apiService.test.ts +1 -1
  157. package/src/internal/nodes/apiService.ts +42 -0
  158. package/src/internal/nodes/cryptoReporter.ts +6 -5
  159. package/src/internal/nodes/cryptoService.ts +9 -0
  160. package/src/internal/nodes/index.test.ts +2 -1
  161. package/src/internal/nodes/index.ts +2 -1
  162. package/src/internal/nodes/interface.ts +1 -1
  163. package/src/internal/nodes/nodeName.test.ts +57 -0
  164. package/src/internal/nodes/nodeName.ts +26 -0
  165. package/src/internal/nodes/nodesAccess.test.ts +2 -2
  166. package/src/internal/nodes/nodesAccess.ts +5 -5
  167. package/src/internal/nodes/nodesManagement.test.ts +65 -0
  168. package/src/internal/nodes/nodesManagement.ts +43 -1
  169. package/src/internal/photos/albums.ts +1 -1
  170. package/src/internal/photos/apiService.ts +40 -0
  171. package/src/internal/photos/index.ts +13 -1
  172. package/src/internal/photos/interface.ts +4 -1
  173. package/src/internal/photos/shares.ts +3 -3
  174. package/src/internal/photos/timeline.test.ts +116 -0
  175. package/src/internal/photos/timeline.ts +47 -2
  176. package/src/internal/shares/cryptoService.ts +5 -1
  177. package/src/internal/shares/index.ts +1 -0
  178. package/src/internal/shares/interface.ts +9 -0
  179. package/src/internal/shares/manager.test.ts +7 -7
  180. package/src/internal/shares/manager.ts +4 -4
  181. package/src/internal/sharing/apiService.ts +15 -12
  182. package/src/internal/sharing/index.ts +7 -1
  183. package/src/internal/sharing/interface.ts +1 -1
  184. package/src/internal/sharing/sharingAccess.test.ts +1 -1
  185. package/src/internal/sharing/sharingAccess.ts +1 -1
  186. package/src/internal/sharing/sharingManagement.test.ts +59 -1
  187. package/src/internal/sharing/sharingManagement.ts +33 -14
  188. package/src/internal/sharingPublic/cryptoReporter.ts +5 -1
  189. package/src/internal/sharingPublic/index.ts +5 -1
  190. package/src/internal/sharingPublic/shares.ts +1 -2
  191. package/src/internal/upload/apiService.ts +0 -39
  192. package/src/internal/upload/cryptoService.ts +0 -9
  193. package/src/internal/upload/fileUploader.ts +0 -5
  194. package/src/internal/upload/manager.test.ts +0 -65
  195. package/src/internal/upload/manager.ts +0 -64
  196. package/src/protonDriveClient.ts +21 -2
  197. package/src/protonDrivePhotosClient.ts +217 -9
  198. package/src/protonDrivePublicLinkClient.ts +77 -2
  199. package/dist/diagnostic/sdkDiagnostic.d.ts +0 -23
  200. package/dist/diagnostic/sdkDiagnostic.js +0 -320
  201. package/dist/diagnostic/sdkDiagnostic.js.map +0 -1
@@ -5,8 +5,15 @@ import { Diagnostic as DiagnosticClass } from './diagnostic';
5
5
  import { Diagnostic } from './interface';
6
6
  import { DiagnosticHTTPClient } from './httpClient';
7
7
  import { DiagnosticTelemetry } from './telemetry';
8
+ import { ProtonDrivePhotosClient } from '../protonDrivePhotosClient';
8
9
 
9
- export type { Diagnostic, DiagnosticResult } from './interface';
10
+ export type {
11
+ Diagnostic,
12
+ DiagnosticOptions,
13
+ ExpectedTreeNode,
14
+ DiagnosticProgressCallback,
15
+ DiagnosticResult,
16
+ } from './interface';
10
17
 
11
18
  /**
12
19
  * Initializes the diagnostic tool. It creates the instance of
@@ -34,5 +41,13 @@ export function initDiagnostic(
34
41
  telemetry,
35
42
  });
36
43
 
37
- return new DiagnosticClass(telemetry, httpClient, protonDriveClient);
44
+ const protonDrivePhotosClient = new ProtonDrivePhotosClient({
45
+ ...options,
46
+ httpClient,
47
+ entitiesCache: new NullCache(),
48
+ cryptoCache: new MemoryCache(),
49
+ telemetry,
50
+ });
51
+
52
+ return new DiagnosticClass(telemetry, httpClient, protonDriveClient, protonDrivePhotosClient);
38
53
  }
@@ -2,24 +2,48 @@ import { Author, MaybeNode, MetricEvent, NodeType, AnonymousUser } from '../inte
2
2
  import { LogRecord } from '../telemetry';
3
3
 
4
4
  export interface Diagnostic {
5
- verifyMyFiles(options?: DiagnosticOptions): AsyncGenerator<DiagnosticResult>;
6
- verifyNodeTree(node: MaybeNode, options?: DiagnosticOptions): AsyncGenerator<DiagnosticResult>;
5
+ verifyMyFiles(
6
+ options?: DiagnosticOptions,
7
+ onProgress?: DiagnosticProgressCallback,
8
+ ): AsyncGenerator<DiagnosticResult>;
9
+ verifyNodeTree(
10
+ node: MaybeNode,
11
+ options?: DiagnosticOptions,
12
+ onProgress?: DiagnosticProgressCallback,
13
+ ): AsyncGenerator<DiagnosticResult>;
14
+ verifyPhotosTimeline(
15
+ options?: DiagnosticOptions,
16
+ onProgress?: DiagnosticProgressCallback,
17
+ ): AsyncGenerator<DiagnosticResult>;
7
18
  }
8
19
 
9
20
  export type DiagnosticOptions = {
10
- verifyContent?: boolean;
21
+ verifyContent?: boolean | 'peakOnly';
11
22
  verifyThumbnails?: boolean;
12
- expectedStructure?: ExcpectedTreeNode;
23
+ expectedStructure?: ExpectedTreeNode;
13
24
  };
14
25
 
15
26
  // Tree structure of the expected node tree.
16
- export type ExcpectedTreeNode = {
27
+ export type ExpectedTreeNode = {
17
28
  name: string;
29
+ expectedMediaType?: string;
18
30
  expectedSha1?: string;
19
31
  expectedSizeInBytes?: number;
20
- children?: ExcpectedTreeNode[];
32
+ // If expectedAuthors is provided, it will be used to verify authors.
33
+ // If it's a string, it will be used to verify all authors match the same email.
34
+ // If it's an object, it will be used to verify specific authors by type.
35
+ expectedAuthors?: ExpectedAuthor | { key?: ExpectedAuthor; name?: ExpectedAuthor; content?: ExpectedAuthor };
36
+ children?: ExpectedTreeNode[];
21
37
  };
22
38
 
39
+ export type ExpectedAuthor = string | 'anonymous';
40
+
41
+ export type DiagnosticProgressCallback = (progress: {
42
+ allNodesLoaded: boolean;
43
+ loadedNodes: number;
44
+ checkedNodes: number;
45
+ }) => void;
46
+
23
47
  export type DiagnosticResult =
24
48
  | FatalErrorResult
25
49
  | SdkErrorResult
@@ -138,7 +162,7 @@ export type ThumbnailsErrorResult = {
138
162
  // the expected structure.
139
163
  export type ExpectedStructureMissingNode = {
140
164
  type: 'expected_structure_missing_node';
141
- expectedNode: ExcpectedTreeNode;
165
+ expectedNode: ExpectedTreeNode;
142
166
  parentNodeUid: string;
143
167
  };
144
168
 
@@ -155,7 +179,7 @@ export type ExpectedStructureUnexpectedNode = {
155
179
  // the claimed values with the real content.
156
180
  export type ExpectedStructureIntegrityError = {
157
181
  type: 'expected_structure_integrity_error';
158
- expectedNode: ExcpectedTreeNode;
182
+ expectedNode: ExpectedTreeNode;
159
183
  claimedSha1?: string;
160
184
  claimedSizeInBytes?: number;
161
185
  } & NodeDetails;
@@ -181,11 +205,13 @@ export type MetricResult = {
181
205
  export type NodeDetails = {
182
206
  safeNodeDetails: {
183
207
  nodeUid: string;
184
- revisionUid?: string;
208
+ revisionUid: string | undefined;
185
209
  nodeType: NodeType;
210
+ mediaType: string | undefined;
186
211
  nodeCreationTime: Date;
187
212
  keyAuthor: Author;
188
213
  nameAuthor: Author;
214
+ contentAuthor: Author | undefined;
189
215
  errors: {
190
216
  field: string;
191
217
  error: unknown;
@@ -0,0 +1,100 @@
1
+ import { MaybeNode, NodeType, Revision } from '../interface';
2
+ import {
3
+ NodeDetails,
4
+ ExpectedTreeNode,
5
+ } from './interface';
6
+
7
+ export function getNodeDetails(node: MaybeNode): NodeDetails {
8
+ const errors: {
9
+ field: string;
10
+ error: unknown;
11
+ }[] = [];
12
+
13
+ if (!node.ok) {
14
+ const degradedNode = node.error;
15
+ if (!degradedNode.name.ok) {
16
+ errors.push({
17
+ field: 'name',
18
+ error: degradedNode.name.error,
19
+ });
20
+ }
21
+ if (degradedNode.activeRevision?.ok === false) {
22
+ errors.push({
23
+ field: 'activeRevision',
24
+ error: degradedNode.activeRevision.error,
25
+ });
26
+ }
27
+ for (const error of degradedNode.errors ?? []) {
28
+ if (error instanceof Error) {
29
+ errors.push({
30
+ field: 'error',
31
+ error,
32
+ });
33
+ }
34
+ }
35
+ }
36
+
37
+ return {
38
+ safeNodeDetails: {
39
+ ...getNodeUids(node),
40
+ nodeType: getNodeType(node),
41
+ mediaType: getMediaType(node),
42
+ nodeCreationTime: node.ok ? node.value.creationTime : node.error.creationTime,
43
+ keyAuthor: node.ok ? node.value.keyAuthor : node.error.keyAuthor,
44
+ nameAuthor: node.ok ? node.value.nameAuthor : node.error.nameAuthor,
45
+ contentAuthor: getActiveRevision(node)?.contentAuthor,
46
+ errors,
47
+ },
48
+ sensitiveNodeDetails: node,
49
+ };
50
+ }
51
+
52
+ export function getNodeUids(node: MaybeNode): { nodeUid: string; revisionUid: string | undefined } {
53
+ const activeRevision = getActiveRevision(node);
54
+ return {
55
+ nodeUid: node.ok ? node.value.uid : node.error.uid,
56
+ revisionUid: activeRevision?.uid,
57
+ };
58
+ }
59
+
60
+ export function getNodeType(node: MaybeNode): NodeType {
61
+ return node.ok ? node.value.type : node.error.type;
62
+ }
63
+
64
+ export function getMediaType(node: MaybeNode): string | undefined {
65
+ return node.ok ? node.value.mediaType : node.error.mediaType;
66
+ }
67
+
68
+ export function getActiveRevision(node: MaybeNode): Revision | undefined {
69
+ if (node.ok) {
70
+ return node.value.activeRevision;
71
+ }
72
+ if (node.error.activeRevision?.ok) {
73
+ return node.error.activeRevision.value;
74
+ }
75
+ return undefined;
76
+ }
77
+
78
+ export function getNodeName(node: MaybeNode): string {
79
+ if (node.ok) {
80
+ return node.value.name;
81
+ }
82
+ if (node.error.name.ok) {
83
+ return node.error.name.value;
84
+ }
85
+ return 'N/A';
86
+ }
87
+
88
+ export function getExpectedTreeNodeDetails(expectedNode: ExpectedTreeNode): ExpectedTreeNode {
89
+ return {
90
+ ...expectedNode,
91
+ children: undefined,
92
+ };
93
+ }
94
+
95
+ export function getTreeNodeChildByNodeName(
96
+ expectedSubtree: ExpectedTreeNode | undefined,
97
+ nodeName: string,
98
+ ): ExpectedTreeNode | undefined {
99
+ return expectedSubtree?.children?.find((expectedNode) => expectedNode.name === nodeName);
100
+ }