@protontech/drive-sdk 0.3.1 → 0.3.2

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/crypto/driveCrypto.d.ts +1 -1
  2. package/dist/crypto/driveCrypto.js.map +1 -1
  3. package/dist/crypto/interface.d.ts +1 -1
  4. package/dist/crypto/openPGPCrypto.d.ts +1 -1
  5. package/dist/crypto/openPGPCrypto.js +4 -1
  6. package/dist/crypto/openPGPCrypto.js.map +1 -1
  7. package/dist/internal/download/cryptoService.js +2 -2
  8. package/dist/internal/download/cryptoService.js.map +1 -1
  9. package/dist/internal/download/fileDownloader.js +2 -2
  10. package/dist/internal/download/fileDownloader.js.map +1 -1
  11. package/dist/internal/download/fileDownloader.test.js +3 -1
  12. package/dist/internal/download/fileDownloader.test.js.map +1 -1
  13. package/dist/internal/nodes/cache.js +3 -1
  14. package/dist/internal/nodes/cache.js.map +1 -1
  15. package/dist/internal/nodes/cryptoReporter.d.ts +20 -0
  16. package/dist/internal/nodes/cryptoReporter.js +96 -0
  17. package/dist/internal/nodes/cryptoReporter.js.map +1 -0
  18. package/dist/internal/nodes/cryptoService.d.ts +17 -12
  19. package/dist/internal/nodes/cryptoService.js +17 -97
  20. package/dist/internal/nodes/cryptoService.js.map +1 -1
  21. package/dist/internal/nodes/cryptoService.test.js +3 -1
  22. package/dist/internal/nodes/cryptoService.test.js.map +1 -1
  23. package/dist/internal/nodes/index.js +3 -1
  24. package/dist/internal/nodes/index.js.map +1 -1
  25. package/dist/internal/nodes/interface.d.ts +1 -1
  26. package/dist/internal/nodes/nodesAccess.d.ts +2 -2
  27. package/dist/internal/nodes/nodesAccess.js +52 -54
  28. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  29. package/dist/internal/sharing/cache.d.ts +3 -0
  30. package/dist/internal/sharing/cache.js +17 -2
  31. package/dist/internal/sharing/cache.js.map +1 -1
  32. package/dist/internal/sharing/interface.d.ts +1 -1
  33. package/dist/internal/sharing/interface.js +1 -1
  34. package/dist/internal/sharing/sharingAccess.js +6 -0
  35. package/dist/internal/sharing/sharingAccess.js.map +1 -1
  36. package/dist/internal/sharing/sharingAccess.test.js +242 -33
  37. package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
  38. package/dist/internal/sharingPublic/apiService.d.ts +1 -1
  39. package/dist/internal/sharingPublic/apiService.js +9 -2
  40. package/dist/internal/sharingPublic/apiService.js.map +1 -1
  41. package/dist/internal/sharingPublic/cryptoService.d.ts +6 -20
  42. package/dist/internal/sharingPublic/cryptoService.js +40 -103
  43. package/dist/internal/sharingPublic/cryptoService.js.map +1 -1
  44. package/dist/internal/sharingPublic/index.d.ts +2 -2
  45. package/dist/internal/sharingPublic/index.js +2 -2
  46. package/dist/internal/sharingPublic/index.js.map +1 -1
  47. package/dist/internal/sharingPublic/interface.d.ts +1 -43
  48. package/dist/internal/sharingPublic/manager.d.ts +1 -1
  49. package/dist/internal/sharingPublic/manager.js +9 -7
  50. package/dist/internal/sharingPublic/manager.js.map +1 -1
  51. package/dist/internal/upload/streamUploader.js +1 -1
  52. package/dist/internal/upload/streamUploader.js.map +1 -1
  53. package/dist/internal/upload/streamUploader.test.js +3 -1
  54. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  55. package/dist/protonDriveClient.js +1 -0
  56. package/dist/protonDriveClient.js.map +1 -1
  57. package/dist/protonDrivePublicLinkClient.d.ts +13 -4
  58. package/dist/protonDrivePublicLinkClient.js +13 -11
  59. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/crypto/driveCrypto.ts +1 -1
  62. package/src/crypto/interface.ts +1 -1
  63. package/src/crypto/openPGPCrypto.ts +5 -2
  64. package/src/internal/download/cryptoService.ts +2 -2
  65. package/src/internal/download/fileDownloader.test.ts +3 -1
  66. package/src/internal/download/fileDownloader.ts +2 -2
  67. package/src/internal/nodes/cache.ts +3 -1
  68. package/src/internal/nodes/cryptoReporter.ts +145 -0
  69. package/src/internal/nodes/cryptoService.test.ts +3 -1
  70. package/src/internal/nodes/cryptoService.ts +44 -137
  71. package/src/internal/nodes/index.ts +3 -1
  72. package/src/internal/nodes/interface.ts +1 -1
  73. package/src/internal/nodes/nodesAccess.ts +59 -61
  74. package/src/internal/sharing/cache.ts +19 -2
  75. package/src/internal/sharing/interface.ts +1 -1
  76. package/src/internal/sharing/sharingAccess.test.ts +282 -34
  77. package/src/internal/sharing/sharingAccess.ts +6 -0
  78. package/src/internal/sharingPublic/apiService.ts +11 -2
  79. package/src/internal/sharingPublic/cryptoService.ts +71 -135
  80. package/src/internal/sharingPublic/index.ts +3 -2
  81. package/src/internal/sharingPublic/interface.ts +8 -53
  82. package/src/internal/sharingPublic/manager.ts +9 -8
  83. package/src/internal/upload/streamUploader.test.ts +3 -1
  84. package/src/internal/upload/streamUploader.ts +1 -1
  85. package/src/protonDriveClient.ts +1 -0
  86. package/src/protonDrivePublicLinkClient.ts +26 -12
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const interface_1 = require("../../interface");
4
+ const errors_1 = require("../../errors");
4
5
  const sharingAccess_1 = require("./sharingAccess");
5
6
  describe('SharingAccess', () => {
6
7
  let apiService;
@@ -9,8 +10,12 @@ describe('SharingAccess', () => {
9
10
  let sharesService;
10
11
  let nodesService;
11
12
  let sharingAccess;
12
- const nodeUids = Array.from({ length: sharingAccess_1.BATCH_LOADING_SIZE + 5 }, (_, i) => `nodeUid${i}`);
13
- const nodes = nodeUids.map((nodeUid) => ({ nodeUid }));
13
+ const nodeUids = Array.from({ length: sharingAccess_1.BATCH_LOADING_SIZE + 5 }, (_, i) => `volumeId~nodeUid${i}`);
14
+ const nodes = nodeUids.map((nodeUid) => ({
15
+ nodeUid,
16
+ shareId: 'shareId',
17
+ name: { ok: true, value: `name${nodeUid.split('~')[1]}` }
18
+ }));
14
19
  const nodeUidsIterator = async function* () {
15
20
  for (const nodeUid of nodeUids) {
16
21
  yield nodeUid;
@@ -27,24 +32,62 @@ describe('SharingAccess', () => {
27
32
  creationTime: new Date('2025-01-01'),
28
33
  node: {
29
34
  type: interface_1.NodeType.File,
30
- mediaType: 'mediaType',
35
+ mediaType: 'image/jpeg',
31
36
  },
32
37
  };
33
38
  }),
39
+ removeMember: jest.fn(),
40
+ iterateInvitationUids: jest.fn().mockImplementation(async function* () {
41
+ yield 'invitationUid';
42
+ }),
43
+ getInvitation: jest.fn().mockResolvedValue({
44
+ uid: 'invitationUid',
45
+ node: { uid: 'volumeId~nodeUid' },
46
+ inviteeEmail: 'invitee-email',
47
+ role: interface_1.MemberRole.Viewer,
48
+ }),
49
+ acceptInvitation: jest.fn(),
50
+ rejectInvitation: jest.fn(),
51
+ deleteBookmark: jest.fn(),
34
52
  };
35
53
  // @ts-expect-error No need to implement all methods for mocking
36
54
  cache = {
37
55
  setSharedByMeNodeUids: jest.fn(),
38
56
  setSharedWithMeNodeUids: jest.fn(),
57
+ getSharedByMeNodeUids: jest.fn(),
58
+ getSharedWithMeNodeUids: jest.fn(),
59
+ hasSharedByMeNodeUidsLoaded: jest.fn().mockResolvedValue(true),
60
+ hasSharedWithMeNodeUidsLoaded: jest.fn().mockResolvedValue(true),
61
+ addSharedByMeNodeUid: jest.fn(),
62
+ removeSharedByMeNodeUid: jest.fn(),
63
+ addSharedWithMeNodeUid: jest.fn(),
64
+ removeSharedWithMeNodeUid: jest.fn(),
39
65
  };
40
66
  // @ts-expect-error No need to implement all methods for mocking
41
67
  cryptoService = {
42
68
  decryptInvitation: jest.fn(),
43
69
  decryptBookmark: jest.fn(),
70
+ decryptInvitationWithNode: jest.fn().mockResolvedValue({
71
+ uid: 'invitationUid',
72
+ inviteeEmail: 'invitee-email',
73
+ role: interface_1.MemberRole.Viewer,
74
+ node: {
75
+ uid: 'volumeId~nodeUid',
76
+ name: { ok: true, value: 'SharedFile.txt' },
77
+ type: interface_1.NodeType.File,
78
+ },
79
+ }),
80
+ acceptInvitation: jest.fn().mockResolvedValue({
81
+ base64SessionKeySignature: 'mockSignature',
82
+ }),
44
83
  };
45
84
  // @ts-expect-error No need to implement all methods for mocking
46
85
  sharesService = {
47
86
  getMyFilesIDs: jest.fn().mockResolvedValue({ volumeId: 'volumeId' }),
87
+ loadEncryptedShare: jest.fn().mockResolvedValue({
88
+ id: 'shareId',
89
+ membership: { memberUid: 'memberUid' },
90
+ }),
48
91
  };
49
92
  // @ts-expect-error No need to implement all methods for mocking
50
93
  nodesService = {
@@ -55,107 +98,273 @@ describe('SharingAccess', () => {
55
98
  }
56
99
  }
57
100
  }),
101
+ getNode: jest.fn().mockResolvedValue({
102
+ nodeUid: 'volumeId~nodeUid',
103
+ shareId: 'shareId',
104
+ name: { ok: true, value: 'TestFile.txt' },
105
+ }),
58
106
  };
59
107
  sharingAccess = new sharingAccess_1.SharingAccess(apiService, cache, cryptoService, sharesService, nodesService);
60
108
  });
61
109
  describe('iterateSharedNodes', () => {
62
- it('should iterate from cache', async () => {
110
+ it('should iterate from cache when available', async () => {
63
111
  cache.getSharedByMeNodeUids = jest.fn().mockResolvedValue(nodeUids);
64
112
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodes());
65
113
  expect(result).toEqual(nodes);
66
114
  expect(apiService.iterateSharedNodeUids).not.toHaveBeenCalled();
67
115
  expect(cache.setSharedByMeNodeUids).not.toHaveBeenCalled();
68
116
  });
69
- it('should iterate from API', async () => {
70
- cache.getSharedByMeNodeUids = jest.fn().mockRejectedValue(new Error('Not cached'));
117
+ it('should iterate from API when cache is empty', async () => {
118
+ cache.getSharedByMeNodeUids = jest.fn().mockRejectedValue(new Error('Cache miss'));
71
119
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodes());
72
120
  expect(result).toEqual(nodes);
73
121
  expect(apiService.iterateSharedNodeUids).toHaveBeenCalledWith('volumeId', undefined);
74
- expect(nodesService.iterateNodes).toHaveBeenCalledTimes(2); // Mocked is a bit more over one batch
122
+ expect(nodesService.iterateNodes).toHaveBeenCalledTimes(2);
75
123
  expect(cache.setSharedByMeNodeUids).toHaveBeenCalledWith(nodeUids);
76
124
  });
125
+ it('should ignore missing nodes during iteration', async () => {
126
+ cache.getSharedByMeNodeUids = jest.fn().mockResolvedValue(['volumeId~nodeUid1', 'volumeId~missingNode']);
127
+ nodesService.iterateNodes = jest.fn().mockImplementation(async function* () {
128
+ yield { nodeUid: 'volumeId~nodeUid1', name: { ok: true, value: 'file1.txt' } };
129
+ yield { missingUid: 'volumeId~missingNode' };
130
+ });
131
+ const result = await Array.fromAsync(sharingAccess.iterateSharedNodes());
132
+ expect(result).toEqual([{ nodeUid: 'volumeId~nodeUid1', name: { ok: true, value: 'file1.txt' } }]);
133
+ });
77
134
  });
78
135
  describe('iterateSharedNodesWithMe', () => {
79
- it('should iterate from cache', async () => {
136
+ it('should iterate from cache when available', async () => {
80
137
  cache.getSharedWithMeNodeUids = jest.fn().mockResolvedValue(nodeUids);
81
138
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodesWithMe());
82
139
  expect(result).toEqual(nodes);
83
140
  expect(apiService.iterateSharedWithMeNodeUids).not.toHaveBeenCalled();
84
141
  expect(cache.setSharedWithMeNodeUids).not.toHaveBeenCalled();
85
142
  });
86
- it('should iterate from API', async () => {
87
- cache.getSharedWithMeNodeUids = jest.fn().mockRejectedValue(new Error('Not cached'));
143
+ it('should iterate from API when cache is empty', async () => {
144
+ cache.getSharedWithMeNodeUids = jest.fn().mockRejectedValue(new Error('Cache miss'));
88
145
  const result = await Array.fromAsync(sharingAccess.iterateSharedNodesWithMe());
89
146
  expect(result).toEqual(nodes);
90
147
  expect(apiService.iterateSharedWithMeNodeUids).toHaveBeenCalledWith(undefined);
91
- expect(nodesService.iterateNodes).toHaveBeenCalledTimes(2); // Mocked is a bit more over one batch
148
+ expect(nodesService.iterateNodes).toHaveBeenCalledTimes(2);
92
149
  expect(cache.setSharedWithMeNodeUids).toHaveBeenCalledWith(nodeUids);
93
150
  });
94
151
  });
152
+ describe('removeSharedNodeWithMe', () => {
153
+ const nodeUid = 'volumeId~nodeUid';
154
+ it('should remove member and update cache', async () => {
155
+ await sharingAccess.removeSharedNodeWithMe(nodeUid);
156
+ expect(nodesService.getNode).toHaveBeenCalledWith(nodeUid);
157
+ expect(sharesService.loadEncryptedShare).toHaveBeenCalledWith('shareId');
158
+ expect(apiService.removeMember).toHaveBeenCalledWith('memberUid');
159
+ expect(cache.removeSharedWithMeNodeUid).toHaveBeenCalledWith(nodeUid);
160
+ });
161
+ it('should return early if node is not shared', async () => {
162
+ nodesService.getNode = jest.fn().mockResolvedValue({
163
+ nodeUid,
164
+ shareId: undefined,
165
+ name: { ok: true, value: 'UnsharedFile.txt' }
166
+ });
167
+ await sharingAccess.removeSharedNodeWithMe(nodeUid);
168
+ expect(sharesService.loadEncryptedShare).not.toHaveBeenCalled();
169
+ expect(apiService.removeMember).not.toHaveBeenCalled();
170
+ expect(cache.removeSharedWithMeNodeUid).not.toHaveBeenCalled();
171
+ });
172
+ it('should throw ValidationError if no membership found', async () => {
173
+ sharesService.loadEncryptedShare = jest.fn().mockResolvedValue({
174
+ id: 'shareId',
175
+ membership: undefined,
176
+ });
177
+ await expect(sharingAccess.removeSharedNodeWithMe(nodeUid)).rejects.toThrow(errors_1.ValidationError);
178
+ expect(apiService.removeMember).not.toHaveBeenCalled();
179
+ expect(cache.removeSharedWithMeNodeUid).not.toHaveBeenCalled();
180
+ });
181
+ });
182
+ describe('iterateInvitations', () => {
183
+ it('should iterate and decrypt invitations', async () => {
184
+ const result = await Array.fromAsync(sharingAccess.iterateInvitations());
185
+ expect(result).toEqual([{
186
+ uid: 'invitationUid',
187
+ inviteeEmail: 'invitee-email',
188
+ role: interface_1.MemberRole.Viewer,
189
+ node: {
190
+ uid: 'volumeId~nodeUid',
191
+ name: { ok: true, value: 'SharedFile.txt' },
192
+ type: interface_1.NodeType.File,
193
+ },
194
+ }]);
195
+ expect(apiService.iterateInvitationUids).toHaveBeenCalledWith(undefined);
196
+ expect(apiService.getInvitation).toHaveBeenCalledWith('invitationUid');
197
+ expect(cryptoService.decryptInvitationWithNode).toHaveBeenCalledWith({
198
+ uid: 'invitationUid',
199
+ node: { uid: 'volumeId~nodeUid' },
200
+ inviteeEmail: 'invitee-email',
201
+ role: interface_1.MemberRole.Viewer,
202
+ });
203
+ });
204
+ });
205
+ describe('acceptInvitation', () => {
206
+ it('should accept invitation and update cache', async () => {
207
+ const invitationUid = 'invitationUid';
208
+ await sharingAccess.acceptInvitation(invitationUid);
209
+ expect(apiService.getInvitation).toHaveBeenCalledWith(invitationUid);
210
+ expect(cryptoService.acceptInvitation).toHaveBeenCalledWith({
211
+ uid: 'invitationUid',
212
+ node: { uid: 'volumeId~nodeUid' },
213
+ inviteeEmail: 'invitee-email',
214
+ role: interface_1.MemberRole.Viewer,
215
+ });
216
+ expect(apiService.acceptInvitation).toHaveBeenCalledWith(invitationUid, 'mockSignature');
217
+ expect(cache.addSharedWithMeNodeUid).toHaveBeenCalledWith('volumeId~nodeUid');
218
+ });
219
+ it('should not update cache when not loaded', async () => {
220
+ const invitationUid = 'invitationUid';
221
+ cache.hasSharedWithMeNodeUidsLoaded = jest.fn().mockResolvedValue(false);
222
+ await sharingAccess.acceptInvitation(invitationUid);
223
+ expect(apiService.acceptInvitation).toHaveBeenCalledWith(invitationUid, 'mockSignature');
224
+ expect(cache.addSharedWithMeNodeUid).not.toHaveBeenCalled();
225
+ });
226
+ });
227
+ describe('rejectInvitation', () => {
228
+ it('should reject invitation', async () => {
229
+ const invitationUid = 'invitationUid';
230
+ await sharingAccess.rejectInvitation(invitationUid);
231
+ expect(apiService.rejectInvitation).toHaveBeenCalledWith(invitationUid);
232
+ });
233
+ });
95
234
  describe('iterateBookmarks', () => {
96
- it('should return decrypted bookmark', async () => {
235
+ it('should return successfully decrypted bookmark', async () => {
97
236
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
98
- url: (0, interface_1.resultOk)('url'),
99
- customPassword: (0, interface_1.resultOk)('customPassword'),
100
- nodeName: (0, interface_1.resultOk)('nodeName'),
237
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
238
+ customPassword: (0, interface_1.resultOk)('password123'),
239
+ nodeName: (0, interface_1.resultOk)('ImportantDocument.pdf'),
101
240
  });
102
241
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
103
242
  expect(result).toEqual([
104
243
  (0, interface_1.resultOk)({
105
244
  uid: 'tokenId',
106
245
  creationTime: new Date('2025-01-01'),
107
- url: 'url',
108
- customPassword: 'customPassword',
246
+ url: 'https://example.com/file.pdf',
247
+ customPassword: 'password123',
109
248
  node: {
110
- name: 'nodeName',
249
+ name: 'ImportantDocument.pdf',
111
250
  type: interface_1.NodeType.File,
112
- mediaType: 'mediaType',
251
+ mediaType: 'image/jpeg',
113
252
  },
114
253
  }),
115
254
  ]);
116
255
  });
117
- it('should return degraded bookmark if URL password cannot be decrypted', async () => {
256
+ it('should return successfully decrypted bookmark with undefined password', async () => {
118
257
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
119
- url: (0, interface_1.resultError)('url cannot be decrypted'),
120
- customPassword: (0, interface_1.resultOk)('url cannot be decrypted'),
121
- nodeName: (0, interface_1.resultError)('url cannot be decrypted'),
258
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
259
+ customPassword: (0, interface_1.resultOk)(undefined),
260
+ nodeName: (0, interface_1.resultOk)('PublicDocument.pdf'),
261
+ });
262
+ const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
263
+ expect(result).toEqual([
264
+ (0, interface_1.resultOk)({
265
+ uid: 'tokenId',
266
+ creationTime: new Date('2025-01-01'),
267
+ url: 'https://example.com/file.pdf',
268
+ customPassword: undefined,
269
+ node: {
270
+ name: 'PublicDocument.pdf',
271
+ type: interface_1.NodeType.File,
272
+ mediaType: 'image/jpeg',
273
+ },
274
+ }),
275
+ ]);
276
+ });
277
+ it('should return degraded bookmark when URL cannot be decrypted', async () => {
278
+ cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
279
+ url: (0, interface_1.resultError)('URL decryption failed'),
280
+ customPassword: (0, interface_1.resultOk)('password123'),
281
+ nodeName: (0, interface_1.resultOk)('Document.pdf'),
282
+ });
283
+ const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
284
+ expect(result).toEqual([
285
+ (0, interface_1.resultError)({
286
+ uid: 'tokenId',
287
+ creationTime: new Date('2025-01-01'),
288
+ url: (0, interface_1.resultError)('URL decryption failed'),
289
+ customPassword: (0, interface_1.resultOk)('password123'),
290
+ node: {
291
+ name: (0, interface_1.resultOk)('Document.pdf'),
292
+ type: interface_1.NodeType.File,
293
+ mediaType: 'image/jpeg',
294
+ },
295
+ }),
296
+ ]);
297
+ });
298
+ it('should return degraded bookmark when custom password cannot be decrypted', async () => {
299
+ cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
300
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
301
+ customPassword: (0, interface_1.resultError)('Password decryption failed'),
302
+ nodeName: (0, interface_1.resultOk)('Document.pdf'),
122
303
  });
123
304
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
124
305
  expect(result).toEqual([
125
306
  (0, interface_1.resultError)({
126
307
  uid: 'tokenId',
127
308
  creationTime: new Date('2025-01-01'),
128
- url: (0, interface_1.resultError)('url cannot be decrypted'),
129
- customPassword: (0, interface_1.resultOk)('url cannot be decrypted'),
309
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
310
+ customPassword: (0, interface_1.resultError)('Password decryption failed'),
130
311
  node: {
131
- name: (0, interface_1.resultError)('url cannot be decrypted'),
312
+ name: (0, interface_1.resultOk)('Document.pdf'),
132
313
  type: interface_1.NodeType.File,
133
- mediaType: 'mediaType',
314
+ mediaType: 'image/jpeg',
134
315
  },
135
316
  }),
136
317
  ]);
137
318
  });
138
- it('should return degraded bookmark if node name cannot be decrypted', async () => {
319
+ it('should return degraded bookmark when node name cannot be decrypted', async () => {
139
320
  cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
140
- url: (0, interface_1.resultOk)('url'),
321
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
141
322
  customPassword: (0, interface_1.resultOk)(undefined),
142
- nodeName: (0, interface_1.resultError)('node name cannot be decrypted'),
323
+ nodeName: (0, interface_1.resultError)('Node name decryption failed'),
143
324
  });
144
325
  const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
145
326
  expect(result).toEqual([
146
327
  (0, interface_1.resultError)({
147
328
  uid: 'tokenId',
148
329
  creationTime: new Date('2025-01-01'),
149
- url: (0, interface_1.resultOk)('url'),
330
+ url: (0, interface_1.resultOk)('https://example.com/file.pdf'),
150
331
  customPassword: (0, interface_1.resultOk)(undefined),
151
332
  node: {
152
- name: (0, interface_1.resultError)('node name cannot be decrypted'),
333
+ name: (0, interface_1.resultError)('Node name decryption failed'),
153
334
  type: interface_1.NodeType.File,
154
- mediaType: 'mediaType',
335
+ mediaType: 'image/jpeg',
155
336
  },
156
337
  }),
157
338
  ]);
158
339
  });
340
+ it('should return degraded bookmark when all decryption fails', async () => {
341
+ cryptoService.decryptBookmark = jest.fn().mockResolvedValue({
342
+ url: (0, interface_1.resultError)('URL decryption failed'),
343
+ customPassword: (0, interface_1.resultError)('Password decryption failed'),
344
+ nodeName: (0, interface_1.resultError)('Node name decryption failed'),
345
+ });
346
+ const result = await Array.fromAsync(sharingAccess.iterateBookmarks());
347
+ expect(result).toEqual([
348
+ (0, interface_1.resultError)({
349
+ uid: 'tokenId',
350
+ creationTime: new Date('2025-01-01'),
351
+ url: (0, interface_1.resultError)('URL decryption failed'),
352
+ customPassword: (0, interface_1.resultError)('Password decryption failed'),
353
+ node: {
354
+ name: (0, interface_1.resultError)('Node name decryption failed'),
355
+ type: interface_1.NodeType.File,
356
+ mediaType: 'image/jpeg',
357
+ },
358
+ }),
359
+ ]);
360
+ });
361
+ });
362
+ describe('deleteBookmark', () => {
363
+ it('should delete bookmark using tokenId', async () => {
364
+ const bookmarkUid = 'tokenId123';
365
+ await sharingAccess.deleteBookmark(bookmarkUid);
366
+ expect(apiService.deleteBookmark).toHaveBeenCalledWith(bookmarkUid);
367
+ });
159
368
  });
160
369
  });
161
370
  //# sourceMappingURL=sharingAccess.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharingAccess.test.js","sourceRoot":"","sources":["../../../src/internal/sharing/sharingAccess.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sharingAccess.test.js","sourceRoot":"","sources":["../../../src/internal/sharing/sharingAccess.test.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,5 @@ export declare class SharingPublicAPIService {
15
15
  encryptedNode: EncryptedNode;
16
16
  encryptedShare: EncryptedShareCrypto;
17
17
  }>;
18
- iterateChildren(parentUid: string): AsyncGenerator<EncryptedNode>;
18
+ iterateFolderChildren(parentUid: string, signal?: AbortSignal): AsyncGenerator<EncryptedNode>;
19
19
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SharingPublicAPIService = void 0;
4
4
  const apiService_1 = require("../apiService");
5
+ const interface_1 = require("../../interface");
5
6
  const uids_1 = require("../uids");
6
7
  const PAGE_SIZE = 50;
7
8
  /**
@@ -31,11 +32,11 @@ class SharingPublicAPIService {
31
32
  },
32
33
  };
33
34
  }
34
- async *iterateChildren(parentUid) {
35
+ async *iterateFolderChildren(parentUid, signal) {
35
36
  const { volumeId: token, nodeId } = (0, uids_1.splitNodeUid)(parentUid);
36
37
  let page = 0;
37
38
  while (true) {
38
- const response = await this.apiService.get(`drive/urls/${token}/folders/${nodeId}/children?Page=${page}&PageSize=${PAGE_SIZE}`);
39
+ const response = await this.apiService.get(`drive/urls/${token}/folders/${nodeId}/children?Page=${page}&PageSize=${PAGE_SIZE}`, signal);
39
40
  for (const link of response.Links) {
40
41
  yield linkToEncryptedNode(this.logger, token, link);
41
42
  }
@@ -55,6 +56,9 @@ function tokenToEncryptedNode(logger, token) {
55
56
  uid: (0, uids_1.makeNodeUid)(token.Token, token.LinkID),
56
57
  parentUid: undefined,
57
58
  type: (0, apiService_1.nodeTypeNumberToNodeType)(logger, token.LinkType),
59
+ creationTime: new Date(), // TODO
60
+ isShared: false,
61
+ directRole: interface_1.MemberRole.Viewer, // TODO
58
62
  };
59
63
  const baseCryptoNodeMetadata = {
60
64
  signatureEmail: token.SignatureEmail || undefined,
@@ -97,7 +101,10 @@ function linkToEncryptedNode(logger, token, link) {
97
101
  uid: (0, uids_1.makeNodeUid)(token, link.LinkID),
98
102
  parentUid: link.ParentLinkID ? (0, uids_1.makeNodeUid)(token, link.ParentLinkID) : undefined,
99
103
  type: (0, apiService_1.nodeTypeNumberToNodeType)(logger, link.Type),
104
+ creationTime: new Date(), // TODO
100
105
  totalStorageSize: link.TotalSize,
106
+ isShared: false,
107
+ directRole: interface_1.MemberRole.Viewer, // TODO
101
108
  };
102
109
  const baseCryptoNodeMetadata = {
103
110
  signatureEmail: link.SignatureEmail || undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"apiService.js","sourceRoot":"","sources":["../../../src/internal/sharingPublic/apiService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiService.js","sourceRoot":"","sources":["../../../src/internal/sharingPublic/apiService.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,9 @@
1
1
  import { DriveCrypto, PrivateKey } from '../../crypto';
2
- import { EncryptedShareCrypto, EncryptedNode, DecryptedNode, DecryptedNodeKeys } from './interface';
3
- /**
4
- * Provides crypto operations for public link data.
5
- *
6
- * The public link crypto service is responsible for decrypting and encrypting
7
- * public link data. It should export high-level actions only, such as "decrypt
8
- * share key" instead of low-level operations like "decrypt key". Low-level
9
- * operations should be kept private to the module.
10
- */
11
- export declare class SharingPublicCryptoService {
12
- private driveCrypto;
2
+ import { ProtonDriveTelemetry, ProtonDriveAccount } from '../../interface';
3
+ import { NodesCryptoService } from '../nodes/cryptoService';
4
+ import { EncryptedShareCrypto } from './interface';
5
+ export declare class SharingPublicCryptoService extends NodesCryptoService {
13
6
  private password;
14
- constructor(driveCrypto: DriveCrypto, password: string);
15
- decryptShareKey(encryptedShare: EncryptedShareCrypto): Promise<PrivateKey>;
16
- decryptNode(node: EncryptedNode, parentKey: PrivateKey): Promise<{
17
- node: DecryptedNode;
18
- keys?: DecryptedNodeKeys;
19
- }>;
20
- private decryptKey;
21
- private decryptName;
22
- private decryptHashKey;
7
+ constructor(telemetry: ProtonDriveTelemetry, driveCrypto: DriveCrypto, account: ProtonDriveAccount, password: string);
8
+ decryptPublicLinkShareKey(encryptedShare: EncryptedShareCrypto): Promise<PrivateKey>;
23
9
  }