@protontech/drive-sdk 0.13.0 → 0.14.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.
Files changed (86) hide show
  1. package/dist/interface/events.d.ts +1 -1
  2. package/dist/interface/telemetry.d.ts +9 -4
  3. package/dist/interface/telemetry.js +1 -0
  4. package/dist/interface/telemetry.js.map +1 -1
  5. package/dist/internal/apiService/driveTypes.d.ts +52 -0
  6. package/dist/internal/download/telemetry.js +6 -1
  7. package/dist/internal/download/telemetry.js.map +1 -1
  8. package/dist/internal/download/telemetry.test.js +5 -0
  9. package/dist/internal/download/telemetry.test.js.map +1 -1
  10. package/dist/internal/events/index.js +2 -2
  11. package/dist/internal/events/index.js.map +1 -1
  12. package/dist/internal/events/interface.d.ts +1 -1
  13. package/dist/internal/nodes/cryptoReporter.js +2 -2
  14. package/dist/internal/nodes/cryptoReporter.js.map +1 -1
  15. package/dist/internal/photos/addToAlbum.d.ts +6 -0
  16. package/dist/internal/photos/addToAlbum.js +1 -0
  17. package/dist/internal/photos/addToAlbum.js.map +1 -1
  18. package/dist/internal/photos/albumsManager.d.ts +4 -1
  19. package/dist/internal/photos/albumsManager.js +22 -2
  20. package/dist/internal/photos/albumsManager.js.map +1 -1
  21. package/dist/internal/photos/albumsManager.test.js +41 -1
  22. package/dist/internal/photos/albumsManager.test.js.map +1 -1
  23. package/dist/internal/photos/apiService.d.ts +1 -0
  24. package/dist/internal/photos/apiService.js +59 -5
  25. package/dist/internal/photos/apiService.js.map +1 -1
  26. package/dist/internal/photos/apiService.test.js +137 -0
  27. package/dist/internal/photos/apiService.test.js.map +1 -1
  28. package/dist/internal/photos/errors.d.ts +5 -0
  29. package/dist/internal/photos/errors.js +10 -1
  30. package/dist/internal/photos/errors.js.map +1 -1
  31. package/dist/internal/photos/index.js +1 -1
  32. package/dist/internal/photos/index.js.map +1 -1
  33. package/dist/internal/photos/photosManager.d.ts +1 -0
  34. package/dist/internal/photos/photosManager.js +42 -4
  35. package/dist/internal/photos/photosManager.js.map +1 -1
  36. package/dist/internal/photos/photosManager.test.js +35 -0
  37. package/dist/internal/photos/photosManager.test.js.map +1 -1
  38. package/dist/internal/photos/photosTransferPayloadBuilder.d.ts +1 -0
  39. package/dist/internal/photos/photosTransferPayloadBuilder.js +1 -0
  40. package/dist/internal/photos/photosTransferPayloadBuilder.js.map +1 -1
  41. package/dist/internal/sharing/apiService.js +1 -1
  42. package/dist/internal/sharing/apiService.js.map +1 -1
  43. package/dist/internal/upload/manager.js +3 -2
  44. package/dist/internal/upload/manager.js.map +1 -1
  45. package/dist/internal/upload/manager.test.js +1 -1
  46. package/dist/internal/upload/manager.test.js.map +1 -1
  47. package/dist/internal/upload/telemetry.js +4 -1
  48. package/dist/internal/upload/telemetry.js.map +1 -1
  49. package/dist/internal/upload/telemetry.test.js +6 -0
  50. package/dist/internal/upload/telemetry.test.js.map +1 -1
  51. package/dist/protonDrivePhotosClient.d.ts +4 -3
  52. package/dist/protonDrivePhotosClient.js +3 -3
  53. package/dist/protonDrivePhotosClient.js.map +1 -1
  54. package/dist/telemetry.d.ts +1 -0
  55. package/dist/telemetry.js +21 -0
  56. package/dist/telemetry.js.map +1 -1
  57. package/dist/telemetry.test.d.ts +1 -0
  58. package/dist/telemetry.test.js +37 -0
  59. package/dist/telemetry.test.js.map +1 -0
  60. package/package.json +1 -1
  61. package/src/interface/events.ts +1 -1
  62. package/src/interface/telemetry.ts +9 -4
  63. package/src/internal/apiService/driveTypes.ts +52 -0
  64. package/src/internal/download/telemetry.test.ts +5 -0
  65. package/src/internal/download/telemetry.ts +7 -3
  66. package/src/internal/events/index.ts +2 -2
  67. package/src/internal/events/interface.ts +1 -1
  68. package/src/internal/nodes/cryptoReporter.ts +4 -2
  69. package/src/internal/photos/addToAlbum.ts +1 -1
  70. package/src/internal/photos/albumsManager.test.ts +61 -1
  71. package/src/internal/photos/albumsManager.ts +23 -3
  72. package/src/internal/photos/apiService.test.ts +155 -0
  73. package/src/internal/photos/apiService.ts +92 -3
  74. package/src/internal/photos/errors.ts +11 -0
  75. package/src/internal/photos/index.ts +1 -1
  76. package/src/internal/photos/photosManager.test.ts +43 -1
  77. package/src/internal/photos/photosManager.ts +61 -3
  78. package/src/internal/photos/photosTransferPayloadBuilder.ts +3 -1
  79. package/src/internal/sharing/apiService.ts +5 -5
  80. package/src/internal/upload/manager.test.ts +1 -1
  81. package/src/internal/upload/manager.ts +3 -2
  82. package/src/internal/upload/telemetry.test.ts +6 -0
  83. package/src/internal/upload/telemetry.ts +5 -3
  84. package/src/protonDrivePhotosClient.ts +4 -4
  85. package/src/telemetry.test.ts +40 -0
  86. package/src/telemetry.ts +22 -0
@@ -0,0 +1,40 @@
1
+ import { reduceSizePrecision } from './telemetry';
2
+
3
+ describe('reduceSizePrecision', () => {
4
+ it('returns 0 for size 0', () => {
5
+ expect(reduceSizePrecision(0)).toBe(0);
6
+ });
7
+
8
+ it('returns 4095 for very small files (size < 4096)', () => {
9
+ expect(reduceSizePrecision(1)).toBe(4095);
10
+ expect(reduceSizePrecision(100)).toBe(4095);
11
+ expect(reduceSizePrecision(4095)).toBe(4095);
12
+ });
13
+
14
+ it('returns precision (100_000) for sizes from 4096 to below precision', () => {
15
+ expect(reduceSizePrecision(4096)).toBe(100_000);
16
+ expect(reduceSizePrecision(50_000)).toBe(100_000);
17
+ expect(reduceSizePrecision(99_999)).toBe(100_000);
18
+ });
19
+
20
+ it('returns size unchanged when size equals precision', () => {
21
+ expect(reduceSizePrecision(100_000)).toBe(100_000);
22
+ });
23
+
24
+ it('rounds down to nearest 100_000 for sizes above precision', () => {
25
+ expect(reduceSizePrecision(100_001)).toBe(100_000);
26
+ expect(reduceSizePrecision(150_000)).toBe(100_000);
27
+ expect(reduceSizePrecision(199_999)).toBe(100_000);
28
+ expect(reduceSizePrecision(200_000)).toBe(200_000);
29
+ expect(reduceSizePrecision(250_000)).toBe(200_000);
30
+ expect(reduceSizePrecision(299_999)).toBe(200_000);
31
+ expect(reduceSizePrecision(300_000)).toBe(300_000);
32
+ });
33
+
34
+ it('handles large sizes', () => {
35
+ expect(reduceSizePrecision(1_000_000)).toBe(1_000_000);
36
+ expect(reduceSizePrecision(1_500_000)).toBe(1_500_000);
37
+ expect(reduceSizePrecision(1_999_999)).toBe(1_900_000);
38
+ expect(reduceSizePrecision(10_000_000)).toBe(10_000_000);
39
+ });
40
+ });
package/src/telemetry.ts CHANGED
@@ -352,3 +352,25 @@ class ConsoleMetricHandler<T extends MetricEvent> implements MetricHandler<T> {
352
352
  );
353
353
  }
354
354
  }
355
+
356
+ export function reduceSizePrecision(size: number): number {
357
+ // The client shouldn't send the clear text size of the file.
358
+ // The intented upload size is needed only for early validation that
359
+ // the file can fit in the remaining quota to avoid data transfer when
360
+ // the upload would be rejected. The backend will still validate
361
+ // the quota during block upload and revision commit.
362
+ const precision = 100_000; // bytes
363
+
364
+ if (size === 0) {
365
+ return 0;
366
+ }
367
+ // We care about very small files in metrics, thus we handle explicitely
368
+ // the very small files so they appear correctly in metrics.
369
+ if (size < 4096) {
370
+ return 4095;
371
+ }
372
+ if (size < precision) {
373
+ return precision;
374
+ }
375
+ return Math.floor(size / precision) * precision;
376
+ }