@secrecy/lib 1.0.0-dev.24 → 1.0.0-dev.27

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 (155) hide show
  1. package/__tests__/client/client.test.ts +81 -0
  2. package/__tests__/client/folder.test.ts +302 -0
  3. package/__tests__/client/mail.test.ts +476 -0
  4. package/__tests__/client/timing.test.ts +35 -0
  5. package/__tests__/client/utils.ts +41 -0
  6. package/__tests__/client/vFile.test.ts +207 -0
  7. package/__tests__/index.test.ts +171 -0
  8. package/commitlint.config.cjs +3 -0
  9. package/{lib/zeus → dist}/index.d.ts +729 -915
  10. package/dist/index.js +255 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index.mjs +255 -0
  13. package/dist/index.mjs.map +1 -0
  14. package/docs/assets/css/main.css +2660 -0
  15. package/docs/assets/images/icons.png +0 -0
  16. package/docs/assets/images/icons@2x.png +0 -0
  17. package/docs/assets/images/widgets.png +0 -0
  18. package/docs/assets/images/widgets@2x.png +0 -0
  19. package/docs/assets/js/main.js +248 -0
  20. package/docs/assets/js/search.js +1 -0
  21. package/docs/classes/baseclient.baseclient-1.html +1165 -0
  22. package/docs/classes/client.secrecyclient.html +2527 -0
  23. package/docs/enums/index.sodium.base64_variants.html +205 -0
  24. package/docs/index.html +198 -0
  25. package/docs/interfaces/client_types.draftmail.html +335 -0
  26. package/docs/interfaces/client_types.filecontentbase.html +231 -0
  27. package/docs/interfaces/client_types.filecontentcloud.html +244 -0
  28. package/docs/interfaces/client_types.filecontentreceivedmail.html +244 -0
  29. package/docs/interfaces/client_types.filecontentsentmail.html +230 -0
  30. package/docs/interfaces/client_types.receivedmail.html +363 -0
  31. package/docs/interfaces/client_types.sentmail.html +335 -0
  32. package/docs/interfaces/crypto.keypair.html +202 -0
  33. package/docs/interfaces/index.sodium.cryptobox.html +185 -0
  34. package/docs/interfaces/index.sodium.cryptokx.html +185 -0
  35. package/docs/interfaces/index.sodium.keypair.html +199 -0
  36. package/docs/interfaces/index.sodium.messagetag.html +185 -0
  37. package/docs/interfaces/index.sodium.secretbox.html +185 -0
  38. package/docs/interfaces/index.sodium.stateaddress.html +171 -0
  39. package/docs/interfaces/index.sodium.stringcryptobox.html +185 -0
  40. package/docs/interfaces/index.sodium.stringcryptokx.html +185 -0
  41. package/docs/interfaces/index.sodium.stringkeypair.html +199 -0
  42. package/docs/interfaces/index.sodium.stringmessagetag.html +185 -0
  43. package/docs/interfaces/index.sodium.stringsecretbox.html +185 -0
  44. package/docs/interfaces/utils_store_buddy.storebuddy.html +333 -0
  45. package/docs/modules/baseclient.html +929 -0
  46. package/docs/modules/cache.html +185 -0
  47. package/docs/modules/client.html +207 -0
  48. package/docs/modules/client_convert_file.html +216 -0
  49. package/docs/modules/client_convert_folder.html +303 -0
  50. package/docs/modules/client_convert_vfile.html +216 -0
  51. package/docs/modules/client_helpers.html +311 -0
  52. package/docs/modules/client_storage.html +167 -0
  53. package/docs/modules/client_types.html +1227 -0
  54. package/docs/modules/client_types_file.html +233 -0
  55. package/docs/modules/client_types_filesonusersonapplications.html +168 -0
  56. package/docs/modules/client_types_folder.html +383 -0
  57. package/docs/modules/client_types_inputs.html +263 -0
  58. package/docs/modules/client_types_mail.html +181 -0
  59. package/docs/modules/client_types_queries.html +199 -0
  60. package/docs/modules/client_types_userappsettings.html +163 -0
  61. package/docs/modules/client_types_vfile.html +364 -0
  62. package/docs/modules/crypto.html +366 -0
  63. package/docs/modules/crypto_file.html +344 -0
  64. package/docs/modules/index.html +779 -0
  65. package/docs/modules/index.sodium.html +6039 -0
  66. package/docs/modules/minify.html +183 -0
  67. package/docs/modules/minify_lz4.html +279 -0
  68. package/docs/modules/popuptools.html +259 -0
  69. package/docs/modules/sodium.html +167 -0
  70. package/docs/modules/utils.html +219 -0
  71. package/docs/modules/utils_store_buddy.html +208 -0
  72. package/docs/modules/utils_time.html +330 -0
  73. package/docs/modules/worker_md5.html +156 -0
  74. package/docs/modules/worker_sodium.html +231 -0
  75. package/docs/modules/worker_workercodes.html +157 -0
  76. package/docs/modules.html +235 -0
  77. package/index.html +21 -0
  78. package/jest.config.ts +27 -0
  79. package/jest.setup.ts +6 -0
  80. package/package.json +30 -39
  81. package/release.config.cjs +15 -0
  82. package/tsup.config.ts +26 -0
  83. package/lib/BaseClient.d.ts +0 -274
  84. package/lib/BaseClient.js +0 -2227
  85. package/lib/PopupTools.d.ts +0 -17
  86. package/lib/PopupTools.js +0 -213
  87. package/lib/ZeusThunder.d.ts +0 -2
  88. package/lib/ZeusThunder.js +0 -113
  89. package/lib/cache.d.ts +0 -7
  90. package/lib/cache.js +0 -5
  91. package/lib/client/admin/index.d.ts +0 -11
  92. package/lib/client/admin/index.js +0 -198
  93. package/lib/client/convert/file.d.ts +0 -5
  94. package/lib/client/convert/file.js +0 -39
  95. package/lib/client/convert/folder.d.ts +0 -8
  96. package/lib/client/convert/folder.js +0 -264
  97. package/lib/client/convert/mail.d.ts +0 -3
  98. package/lib/client/convert/mail.js +0 -46
  99. package/lib/client/convert/vFile.d.ts +0 -5
  100. package/lib/client/convert/vFile.js +0 -164
  101. package/lib/client/helpers.d.ts +0 -23
  102. package/lib/client/helpers.js +0 -114
  103. package/lib/client/index.d.ts +0 -172
  104. package/lib/client/index.js +0 -6171
  105. package/lib/client/storage.d.ts +0 -7
  106. package/lib/client/storage.js +0 -12
  107. package/lib/client/types/File.d.ts +0 -21
  108. package/lib/client/types/File.js +0 -3
  109. package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  110. package/lib/client/types/FilesOnUsersOnApplications.js +0 -3
  111. package/lib/client/types/Folder.d.ts +0 -68
  112. package/lib/client/types/Folder.js +0 -7
  113. package/lib/client/types/Inputs.d.ts +0 -21
  114. package/lib/client/types/Inputs.js +0 -3
  115. package/lib/client/types/UserAppNotifications.d.ts +0 -6
  116. package/lib/client/types/UserAppNotifications.js +0 -3
  117. package/lib/client/types/UserAppSettings.d.ts +0 -7
  118. package/lib/client/types/UserAppSettings.js +0 -3
  119. package/lib/client/types/VFile.d.ts +0 -62
  120. package/lib/client/types/VFile.js +0 -4
  121. package/lib/client/types/index.d.ts +0 -154
  122. package/lib/client/types/index.js +0 -10
  123. package/lib/client/types/queries.d.ts +0 -535
  124. package/lib/client/types/queries.js +0 -192
  125. package/lib/crypto/file.d.ts +0 -14
  126. package/lib/crypto/file.js +0 -291
  127. package/lib/crypto/index.d.ts +0 -12
  128. package/lib/crypto/index.js +0 -37
  129. package/lib/error.d.ts +0 -30
  130. package/lib/error.js +0 -3
  131. package/lib/index.d.ts +0 -13
  132. package/lib/index.js +0 -42
  133. package/lib/minify/index.d.ts +0 -2
  134. package/lib/minify/index.js +0 -28
  135. package/lib/minify/lz4.d.ts +0 -5
  136. package/lib/minify/lz4.js +0 -633
  137. package/lib/sodium.d.ts +0 -3
  138. package/lib/sodium.js +0 -28
  139. package/lib/utils/store-buddy.d.ts +0 -14
  140. package/lib/utils/store-buddy.js +0 -69
  141. package/lib/utils/time.d.ts +0 -10
  142. package/lib/utils/time.js +0 -22
  143. package/lib/utils.d.ts +0 -4
  144. package/lib/utils.js +0 -188
  145. package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
  146. package/lib/worker/__mock__/sodium.worker.js +0 -46
  147. package/lib/worker/md5.d.ts +0 -1
  148. package/lib/worker/md5.js +0 -43
  149. package/lib/worker/sodium.d.ts +0 -3
  150. package/lib/worker/sodium.js +0 -155
  151. package/lib/worker/workerCodes.d.ts +0 -2
  152. package/lib/worker/workerCodes.js +0 -3
  153. package/lib/zeus/const.d.ts +0 -2
  154. package/lib/zeus/const.js +0 -2267
  155. package/lib/zeus/index.js +0 -549
@@ -0,0 +1,81 @@
1
+ import { chrisId, raphId, chris, raph, axel, axelId } from "./utils.js";
2
+ import { setup } from "../../src/index.js";
3
+
4
+ beforeAll(setup);
5
+
6
+ describe("SecrecyClient", () => {
7
+ test("me", async () => {
8
+ const chrisMe = await chris.me({ withPublicKey: true });
9
+ if (!chrisMe) {
10
+ throw new Error("undefined or null: chrisMe");
11
+ }
12
+ if (chrisMe.__typename === "ErrorNotFound") {
13
+ throw new Error("chrisMe not found");
14
+ }
15
+ expect(chrisMe.data).toMatchObject({
16
+ email: "chris@secrecy.me",
17
+ firstname: "Christopher",
18
+ id: chrisId,
19
+ lastname: "Yovanovitch",
20
+ phone: "+33783263010",
21
+ publicKey: chris.publicKey,
22
+ role: "admin"
23
+ });
24
+ const raphMe = await raph.me({ withPublicKey: true });
25
+ if (!raphMe) {
26
+ throw new Error("undefined or null: raphMe");
27
+ }
28
+ if (raphMe.__typename === "ErrorNotFound") {
29
+ throw new Error("raphMe not found");
30
+ }
31
+ expect(raphMe.data).toMatchObject({
32
+ email: "raphaelmortier@outlook.fr",
33
+ firstname: "Raphaël",
34
+ id: raphId,
35
+ lastname: "Mortier",
36
+ phone: "+33622471563",
37
+ publicKey: raph.publicKey,
38
+ role: "admin"
39
+ });
40
+ const axelMe = await axel.me({ withPublicKey: true });
41
+ if (!axelMe) {
42
+ throw new Error("undefined or null: axelMe");
43
+ }
44
+ if (axelMe.__typename === "ErrorNotFound") {
45
+ throw new Error("axelMe not found");
46
+ }
47
+ expect(axelMe.data).toMatchObject({
48
+ email: "axel.lavoie@gmail.com",
49
+ firstname: "Axel",
50
+ id: axelId,
51
+ lastname: "Lavoie",
52
+ phone: "+33627464948",
53
+ publicKey: axel.publicKey,
54
+ role: "admin"
55
+ });
56
+ });
57
+
58
+ test("limits", async () => {
59
+ const limits = await chris.limits();
60
+ if (!limits) {
61
+ throw new Error("limits not found");
62
+ }
63
+ if (limits.__typename === "ErrorAccessDenied") {
64
+ throw new Error("ErrorAccessDenied");
65
+ }
66
+ if (limits.__typename === "ErrorLimit") {
67
+ throw new Error("ErrorLimit");
68
+ }
69
+ if (limits.__typename === "ErrorNotExist") {
70
+ throw new Error("ErrorNotExist");
71
+ }
72
+ if (limits.__typename === "ErrorNotFound") {
73
+ throw new Error("ErrorNotFound");
74
+ }
75
+ expect(limits.data).toMatchObject({
76
+ cloud: {
77
+ maxCount: 10000n
78
+ }
79
+ });
80
+ });
81
+ });
@@ -0,0 +1,302 @@
1
+ import { chris, raph, raphId } from "./utils.js";
2
+ import { Rights, setup } from "../../src/index.js";
3
+
4
+ beforeAll(setup);
5
+
6
+ beforeAll(async () => {
7
+ await Promise.all([chris.emptyCloudTrash(), raph.emptyCloudTrash()]);
8
+ });
9
+
10
+ describe("SecrecyClient - Folders", () => {
11
+ test("wrong folder", async () => {
12
+ //wrong folder
13
+ const folder = await chris.folder({
14
+ id: "id"
15
+ });
16
+ expect(folder).toBeNull();
17
+ });
18
+
19
+ test("shareFolder", async () => {
20
+ //root folder
21
+ const rootFolder = await chris.folder();
22
+ expect(rootFolder).not.toBeNull();
23
+ if (!rootFolder) {
24
+ throw new Error("empty or undefined value: rootFolder");
25
+ }
26
+
27
+ if (rootFolder.__typename === "ErrorAccessDenied") {
28
+ expect(rootFolder.message).toBe("Access denied");
29
+ }
30
+ if (rootFolder.__typename === "SuccessResponse") {
31
+ const cloudFolder = rootFolder.data.subfolders.find(
32
+ f => f.name === "cloud"
33
+ );
34
+ expect(cloudFolder).not.toBeUndefined();
35
+ if (!cloudFolder) {
36
+ throw new Error("empty or undefined value: cloudFolder");
37
+ }
38
+
39
+ //create folder
40
+ const name = "test_folder_to_share";
41
+ const folderToShare = await chris.createFolder({
42
+ name,
43
+ parentFolderId: cloudFolder.id
44
+ });
45
+
46
+ expect(folderToShare).not.toBeNull();
47
+ if (!folderToShare) {
48
+ throw new Error("empty or undefined value: folderToShare");
49
+ }
50
+
51
+ if (folderToShare.__typename !== "SuccessResponse") {
52
+ throw new Error("folderToShare is not a SuccessResponse");
53
+ }
54
+
55
+ //share folder
56
+ const res = await chris.shareFolder({
57
+ folderId: folderToShare.data.id,
58
+ rights: Rights.write,
59
+ userId: raphId
60
+ });
61
+ expect(res).toStrictEqual({ __typename: "SuccessResponse", data: true });
62
+ const allShared = await raph.foldersSharedWithMe();
63
+ if (!allShared) {
64
+ throw new Error("empty or undefined value: allShared");
65
+ }
66
+
67
+ if (allShared.__typename === "ErrorAccessDenied") {
68
+ throw new Error("Access denied");
69
+ }
70
+
71
+ if (allShared.__typename === "SuccessResponse") {
72
+ const folderShared = allShared.data.find(
73
+ f => f.id === folderToShare.data.id
74
+ );
75
+ expect(folderShared).not.toBeUndefined();
76
+ if (!folderShared) {
77
+ throw new Error("empty or undefined value: folderShared");
78
+ }
79
+
80
+ expect(folderShared.name).toBe(name);
81
+
82
+ //create folder in shared folder
83
+ const nameFolder = "test";
84
+ await raph.createFolder({
85
+ name: nameFolder,
86
+ parentFolderId: folderToShare.data.id
87
+ });
88
+ const test = await chris.folder({ id: folderToShare.data.id });
89
+ await chris.deleteFolder({ id: folderToShare.data.id });
90
+ expect(test).not.toBeNull();
91
+ if (!test) {
92
+ throw new Error("empty or undefined value: test");
93
+ }
94
+
95
+ if (test.__typename === "ErrorAccessDenied") {
96
+ throw new Error("Access denied");
97
+ }
98
+
99
+ if (test.__typename === "SuccessResponse") {
100
+ const folderCreatedByraph = test.data.subfolders.find(
101
+ f => f.name === nameFolder
102
+ );
103
+ expect(folderCreatedByraph).not.toBeUndefined();
104
+ if (!folderCreatedByraph) {
105
+ throw new Error("empty or undefined value: folderCreatedByraph");
106
+ }
107
+ expect(folderCreatedByraph.name).toBe(nameFolder);
108
+
109
+ //delete sharing
110
+ const deleteSharing = await chris.deleteFolderSharing({
111
+ folderId: test.data.id,
112
+ userId: raphId
113
+ });
114
+ expect(deleteSharing).toStrictEqual({
115
+ __typename: "SuccessResponse",
116
+ data: true
117
+ });
118
+ }
119
+ }
120
+ }
121
+ }, 50000);
122
+
123
+ test("deleteFolder", async () => {
124
+ //root folder
125
+ const rootFolder = await chris.folder();
126
+ expect(rootFolder).not.toBeNull();
127
+ if (!rootFolder) {
128
+ throw new Error("empty or undefined value: rootFolder");
129
+ }
130
+ if (rootFolder.__typename === "ErrorAccessDenied") {
131
+ throw new Error("Access denied");
132
+ }
133
+ const cloudFolder = rootFolder.data.subfolders.find(
134
+ f => f.name === "cloud"
135
+ );
136
+ expect(cloudFolder).not.toBeUndefined();
137
+ if (!cloudFolder) {
138
+ throw new Error("empty or undefined value: cloudFolder");
139
+ }
140
+
141
+ // create folder
142
+ const name = "test_folder_to_delete";
143
+ const folderToDelete = await chris.createFolder({
144
+ name,
145
+ parentFolderId: cloudFolder.id
146
+ });
147
+
148
+ expect(folderToDelete).not.toBeNull();
149
+ if (!folderToDelete) {
150
+ throw new Error("empty or undefined value: folderToDelete");
151
+ }
152
+
153
+ if (folderToDelete.__typename !== "SuccessResponse") {
154
+ throw new Error("folderToDelete is not a SuccessResponse");
155
+ }
156
+
157
+ // test breadcrumb
158
+ expect(folderToDelete.data.breadcrumb.map(f => f.name)).toEqual([
159
+ name,
160
+ "cloud",
161
+ "root"
162
+ ]);
163
+
164
+ // delete folder
165
+ const deletedFolder = await chris.deleteFolder({
166
+ id: folderToDelete.data.id
167
+ });
168
+ expect(deletedFolder).toStrictEqual({
169
+ __typename: "SuccessResponse",
170
+ data: true
171
+ });
172
+ const folderDeleted = await chris.folder({
173
+ id: folderToDelete.data.id,
174
+ deleted: true
175
+ });
176
+ expect(folderDeleted).not.toBeNull();
177
+ if (!folderDeleted) {
178
+ throw new Error("empty or undefined value: folderDeleted");
179
+ }
180
+ if (folderDeleted.__typename === "ErrorAccessDenied") {
181
+ throw new Error("Access denied");
182
+ }
183
+ expect(folderDeleted.data.deletedAt).not.toBeNull();
184
+ const deletedFolders = await chris.deletedFolders();
185
+ if (!deletedFolders) {
186
+ throw new Error("empty or undefined value: deletedFolders");
187
+ }
188
+ if (deletedFolders.__typename === "ErrorAccessDenied") {
189
+ throw new Error("Access denied");
190
+ }
191
+ const folderDeletedByChris = deletedFolders.data.find(
192
+ f => f.id === folderToDelete.data.id
193
+ );
194
+ if (!folderDeletedByChris) {
195
+ throw new Error("empty or undefined value: folderDeletedByChris");
196
+ }
197
+ expect(folderDeletedByChris.name).toBe(folderToDelete.data.name);
198
+
199
+ //recover folder
200
+ const folderToRecover = await chris.recoverFolder({
201
+ id: folderDeleted.data.id
202
+ });
203
+
204
+ expect(folderToRecover).toStrictEqual({
205
+ __typename: "SuccessResponse",
206
+ data: true
207
+ });
208
+ const folderRecovered = await chris.folder({
209
+ id: folderDeleted.data.id
210
+ });
211
+
212
+ if (!folderRecovered) {
213
+ throw new Error("empty or undefined value: folderRecovered");
214
+ }
215
+ if (folderRecovered.__typename === "ErrorAccessDenied") {
216
+ throw new Error("Access denied");
217
+ }
218
+ expect(folderRecovered).not.toBeNull();
219
+ if (!folderRecovered) {
220
+ throw new Error("empty or undefined value: folderRecovered");
221
+ }
222
+ expect(folderRecovered.data.deletedAt).toBeNull();
223
+
224
+ // await expect(
225
+ // raph.recoverFolder({ id: folderDeleted.id })
226
+ // ).rejects.toThrowError("Invalid plan");
227
+
228
+ //delete cloud trash
229
+ const deletedFolderCloudTrash = await chris.deleteFolderCloudTrash({
230
+ ids: [folderRecovered.data.id]
231
+ });
232
+ expect(deletedFolderCloudTrash).toBe(true);
233
+ }, 50000);
234
+
235
+ test("update folder", async () => {
236
+ //root folder
237
+ const rootFolder = await chris.folder();
238
+ expect(rootFolder).not.toBeNull();
239
+ if (!rootFolder) {
240
+ throw new Error("empty or undefined value: rootFolder");
241
+ }
242
+ if (rootFolder.__typename === "ErrorAccessDenied") {
243
+ throw new Error("Access denied");
244
+ }
245
+ const cloudFolder = rootFolder.data.subfolders.find(
246
+ f => f.name === "cloud"
247
+ );
248
+ expect(cloudFolder).not.toBeUndefined();
249
+ if (!cloudFolder) {
250
+ throw new Error("empty or undefined value: cloudFolder");
251
+ }
252
+
253
+ //create folder
254
+ const name = "test_folder_to_update";
255
+ const folderToUpdate = await chris.createFolder({
256
+ name,
257
+ parentFolderId: cloudFolder.id
258
+ });
259
+
260
+ expect(folderToUpdate).not.toBeNull();
261
+ if (!folderToUpdate) {
262
+ throw new Error("empty or undefined value: folderToUpdate");
263
+ }
264
+
265
+ if (folderToUpdate.__typename !== "SuccessResponse") {
266
+ throw new Error("folderToUpdate is not a SuccessResponse");
267
+ }
268
+
269
+ //update folder
270
+ const folderUpdated = await chris.updateFolder({
271
+ folderId: folderToUpdate.data.id,
272
+ name: "test_folder_updated"
273
+ });
274
+
275
+ expect(folderUpdated).not.toBeNull();
276
+ if (!folderUpdated) {
277
+ throw new Error("empty or undefined value: folderUpdated");
278
+ }
279
+
280
+ if (folderUpdated.__typename !== "SuccessResponse") {
281
+ throw new Error("folderToUpdate is not a SuccessResponse");
282
+ }
283
+
284
+ expect(folderUpdated.data.name).toBe("test_folder_updated");
285
+
286
+ //delete folder
287
+ const deletedFolder = await chris.deleteFolder({
288
+ id: folderToUpdate.data.id
289
+ });
290
+ expect(deletedFolder).toStrictEqual({
291
+ __typename: "SuccessResponse",
292
+ data: true
293
+ });
294
+ const deletedFolderCloudTrash = await chris.deleteFolderCloudTrash({
295
+ ids: [folderToUpdate.data.id]
296
+ });
297
+ expect(deletedFolderCloudTrash).toStrictEqual({
298
+ __typename: "SuccessResponse",
299
+ data: true
300
+ });
301
+ });
302
+ });