orgnote-api 0.12.2 → 0.12.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/api.ts ADDED
@@ -0,0 +1,119 @@
1
+ import {
2
+ Command,
3
+ CSSVariable,
4
+ ThemeVariable,
5
+ Note,
6
+ InlineEmbeddedWidget,
7
+ MultilineEmbeddedWidget,
8
+ OrgLineClass,
9
+ WidgetBuilder,
10
+ CommandPreview,
11
+ OrgNoteEncryption,
12
+ Modal,
13
+ } from './models';
14
+ import type { NavigationFailure } from 'vue-router';
15
+ import { WidgetType } from './models/widget-type';
16
+ import type { Component } from 'vue';
17
+ import { NodeType } from 'org-mode-ast';
18
+ import { EditorExtension } from './models/editor';
19
+
20
+ type WithNodeType<T> = { nodeType: NodeType } & T;
21
+
22
+ export type WidgetMeta =
23
+ | ({ type: WidgetType.Inline } & WithNodeType<InlineEmbeddedWidget>)
24
+ | ({ type: WidgetType.Multiline } & WithNodeType<MultilineEmbeddedWidget>)
25
+ | ({ type: WidgetType.LineClass } & WithNodeType<OrgLineClass>);
26
+
27
+ export interface OrgNoteApi {
28
+ [key: string]: unknown;
29
+ getExtension?<T>(config: string): T;
30
+
31
+ system: {
32
+ reload: (params?: { verbose: boolean }) => Promise<void>;
33
+ setNewFilesAvailable: (status?: boolean) => void;
34
+ };
35
+ navigation: {
36
+ openNote: (id: string) => Promise<void | NavigationFailure>;
37
+ editNote: (id: string) => Promise<void | NavigationFailure>;
38
+ };
39
+ ui: {
40
+ applyTheme: (theme: { [key in ThemeVariable]: string | number }) => void;
41
+ applyCssVariables: (styles: {
42
+ [key in CSSVariable]: string | number;
43
+ }) => void;
44
+ setThemeByMode: (themeName?: string) => void;
45
+ setDarkTheme: (themeName?: string) => void;
46
+ setLightTheme: (themeName?: string) => void;
47
+ applyStyles: (scopeName: string, styles: string) => void;
48
+ removeStyles: (scopeName: string) => void;
49
+ resetTheme: () => void;
50
+ openModal: (modal: Modal) => void;
51
+ };
52
+ interaction: {
53
+ confirm: (title: string, message: string) => Promise<boolean>;
54
+ };
55
+ currentNote: {
56
+ get: () => Note;
57
+ };
58
+ editor: {
59
+ extensions: {
60
+ add: (...extension: EditorExtension[]) => void;
61
+ remove: (...extension: EditorExtension[]) => void;
62
+ };
63
+ widgets: {
64
+ add: (...widgetMeta: WidgetMeta[]) => void;
65
+ createWidgetBuilder: (
66
+ cmp: Component,
67
+ props?: { [key: string]: unknown }
68
+ ) => WidgetBuilder;
69
+ };
70
+ };
71
+ // Available only on mobile apps
72
+ fileSystem: {
73
+ readPath: () => Promise<string>;
74
+ };
75
+ commands: {
76
+ add(...commands: Command[]): void;
77
+ remove(...commands: Command[]): void;
78
+ get(name: string): Command;
79
+ getAll(): Command[];
80
+ addCommandToSidebar(...commands: CommandPreview[]): void;
81
+ removeCommandFromSidebar(...commands: CommandPreview[]): void;
82
+ addCommandToEditorPanel(...commands: CommandPreview[]): void;
83
+ removeCommandFromEditorPanel(...commands: CommandPreview[]): void;
84
+ };
85
+ configuration: () => OrgNoteConfig;
86
+ }
87
+
88
+ // TODO: master move model to the backend service
89
+ export interface OrgNoteConfig {
90
+ editor: {
91
+ showSpecialSymbols: boolean;
92
+ showPropertyDrawer: boolean;
93
+ };
94
+ developer: {
95
+ developerMode: boolean;
96
+ maximumLogsCount: number;
97
+ };
98
+ completion: {
99
+ showGroup: boolean;
100
+ defaultCompletionLimit: number;
101
+ };
102
+ system: {
103
+ language: string;
104
+ };
105
+ synchronization: {
106
+ type: 'none' | 'api' | 'filesystem';
107
+ path?: string;
108
+ };
109
+ ui: {
110
+ showUserProfiles: boolean;
111
+ theme: 'light' | 'dark' | 'auto';
112
+ darkThemeName?: string;
113
+ lightThemeName?: string;
114
+ };
115
+ extensions: {
116
+ sources: string[];
117
+ };
118
+ encryption: OrgNoteEncryption;
119
+ }
@@ -0,0 +1,185 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Should decrypt note content via password 1`] = `
4
+ {
5
+ "content": "#+ID: qweqwe
6
+ #+TITLE: Hello worlld
7
+
8
+ * Hello?",
9
+ "encrypted": false,
10
+ "encryptionType": "gpgPassword",
11
+ "id": "id",
12
+ "meta": {
13
+ "headings": [
14
+ {
15
+ "level": 1,
16
+ "title": "Hello?",
17
+ },
18
+ ],
19
+ "id": "qweqwe",
20
+ "title": "Hello worlld",
21
+ },
22
+ }
23
+ `;
24
+
25
+ exports[`Should decrypt note via provided keys 1`] = `
26
+ {
27
+ "content": "#+ID: qweqwe
28
+ #+TITLE: Hello worlld
29
+
30
+ * Hello?",
31
+ "encrypted": false,
32
+ "encryptionType": "gpgKeys",
33
+ "id": "id",
34
+ "meta": {
35
+ "headings": [
36
+ {
37
+ "level": 1,
38
+ "title": "Hello?",
39
+ },
40
+ ],
41
+ "id": "qweqwe",
42
+ "title": "Hello worlld",
43
+ },
44
+ }
45
+ `;
46
+
47
+ exports[`Should encrypt note content via password 1`] = `
48
+ {
49
+ "author": {
50
+ "email": "test@mail.com",
51
+ "id": "1",
52
+ "name": "John Doe",
53
+ },
54
+ "encrypted": true,
55
+ "encryptionType": "gpgPassword",
56
+ "id": "id",
57
+ "meta": {
58
+ "id": undefined,
59
+ "published": false,
60
+ },
61
+ }
62
+ `;
63
+
64
+ exports[`Should encrypt note via keys 1`] = `
65
+ {
66
+ "author": {
67
+ "email": "test@mail.com",
68
+ "id": "1",
69
+ "name": "John Doe",
70
+ },
71
+ "encrypted": true,
72
+ "encryptionType": "gpgKeys",
73
+ "id": "id",
74
+ "meta": {
75
+ "id": undefined,
76
+ "published": false,
77
+ },
78
+ }
79
+ `;
80
+
81
+ exports[`Should encrypt note with empty encrypted property 1`] = `
82
+ {
83
+ "author": {
84
+ "email": "test@mail.com",
85
+ "id": "1",
86
+ "name": "John Doe",
87
+ },
88
+ "encrypted": true,
89
+ "id": "id",
90
+ "meta": {
91
+ "id": undefined,
92
+ "published": false,
93
+ },
94
+ }
95
+ `;
96
+
97
+ exports[`Should not decrypt note without provided encrypted type 1`] = `
98
+ {
99
+ "author": {
100
+ "email": "test@mail.com",
101
+ "id": "1",
102
+ "name": "John Doe",
103
+ },
104
+ "content": "#+ID: qweqwe
105
+ #+TITLE: Hello worlld
106
+
107
+ * Hello?",
108
+ "encrypted": false,
109
+ "id": "id",
110
+ "meta": {
111
+ "description": "Awesome description",
112
+ "images": [],
113
+ "published": false,
114
+ "title": "My note title",
115
+ },
116
+ }
117
+ `;
118
+
119
+ exports[`Should not encrypt public note 1`] = `
120
+ {
121
+ "author": {
122
+ "email": "test@mail.com",
123
+ "id": "1",
124
+ "name": "John Doe",
125
+ },
126
+ "content": "#+ID: qweqwe
127
+ #+TITLE: Hello worlld
128
+
129
+ * Hello?",
130
+ "encrypted": false,
131
+ "encryptionType": "gpgPassword",
132
+ "id": "id",
133
+ "meta": {
134
+ "description": "Awesome description",
135
+ "images": [],
136
+ "published": true,
137
+ "title": "My note title",
138
+ },
139
+ }
140
+ `;
141
+
142
+ exports[`Should set not encrypted status when params type does not provided 1`] = `
143
+ {
144
+ "content": "-----BEGIN PGP MESSAGE-----
145
+
146
+ wcFMA/vryg+TTn0rAQ//TBFRjKmjRQoLhSrgeH+NbsZXbxvo7Ey4k+BQ9XA5
147
+ +CMpXH9uFUxsSaI5+McUSEt32VI17HRpXQDCL9nwaWqWOanMaRe0tXXhtox2
148
+ gfe2f/6zsge9ux+mXF2BG4z+V5T8XIOrfzxosVprdJHZHM3x7cW5USQ0t2i2
149
+ FiOUWxSZO1899J3yICpMvhDXvTLVZuKpSNQho5PyXSeZa83eN+uYkhgt9lsk
150
+ 0KW88Nr435S6n6mVw/zpitXIgEKpkqh46mhG+1W3aC0lYx6j9lHm3bjtdb4r
151
+ 2mtZbWKwfdBggEy8qEeiUeslvKd6uWtEccomzFgJkaqWVGknLmrBdHfztRIV
152
+ fbZhxHz+J3GFOIgXf/5+fv+zg0nTazgz1mDUfnTHw3+qcAyEJ0ADdyg9EZc+
153
+ bKbK0GwzMDPQeM+cCRDWUTiIa1ruyEETiwMdhWUDztF8XxY2o8jXPerZ0NhG
154
+ R8l+SvAdYQQXPfxEh9lA3thkyz/Vp72pW46lUeJHGSq/fS6KIdLHLP9Z2e1J
155
+ aCFpNMgyAN+BaXwnbLZfz6k5hV8awbRScSWQLEg69D9b287SFDPOYW7OZikn
156
+ CKXL7xyQ5LrWJZN9Z/UPGjy+PdEw1SBhyluW6DQ+Sz1j4K8USTLqY89EInDl
157
+ G7AxHGujR9UkUGyUvvc71XW7jEOogiDgn1ZMoj9Y58LSweUB8vfkY3VF84Fy
158
+ zGVvLFWnFbtnWuoQC4OOXv1F6ETdmEsSMEMWKzRLDGPyqNX7FhG3cejlEuiK
159
+ EsT5oQhz00RECmnR8mJkGmJhzWmmeoQvaucFqhTOZjvYl9ivuEMBZ2jtkdHn
160
+ R6UNcNZRpCbfnl7YoikqbGBgqDFYydFGHXKHDpYhcQYWJsMDUayzUiPtzmaE
161
+ tgfTgNNqgPxkLnWA99KYNU8DH+FwgaYBuw9dwdqwcjxSbZjHhCFGUfsqM+ik
162
+ O9gcoAwVO1usODlESU7OWuSF2tIv5DBG5rhlSyxBp4d4aWmaumTswAdojy2O
163
+ sM70ETbg0mC8niW9lNsgJp55oFmlksvzjUIit5rBEr55rtPcJSgakPpR2yvd
164
+ Q4XjybUmV0IdONMhk/OlqaBPtnA0RG+qTcm7oP1qH/m5zRA0ZplVQ5ylkQwr
165
+ LwGq5JQpJkgxxgLIrUbbtzYBShXSr5c1XXR0LIRiNgtb6s1s4mt+fbyExdJF
166
+ +ceuu+/xYrW/YTuEJpHxLiZ+aNPW5g5Y7Hbqu3hp3UL/kD44cc8JjZh18spX
167
+ p/ncojDhF2r2vhR+CndYcMkpGMV+t1pGKC8wlcFc7lb9GJASnqMGvhQmvIaG
168
+ gO/x7UjuTZSBW+kITHHZJDqYryKUv1j0CkHxIn9tWsYOpa1giOFtXX5v0AAM
169
+ AJR/s/beLlqwCsUdYnw1TkP/0u0ZK3RPio1nJ7S6ckPfsM7DqCWD8ILD8Cdr
170
+ cuzQrWaE30t5PXx53xBPO+6t5wKfDL35WHWG1Irmvz9UuT7tDS3IzwtF4ijF
171
+ PX6alTbxGnoHgZ4bG4J1wfpTNPppP1gJeVg67VqOypzdZi+SjofMWnFgRFmD
172
+ yEN8xpFUs7A9xryVZOosp9Sfe3IbBkO99sAQ7jV4EoMYk3/GKA==
173
+ =LjkG
174
+ -----END PGP MESSAGE-----",
175
+ "encrypted": true,
176
+ "encryptionType": "gpgKeys",
177
+ "id": "id",
178
+ "meta": {
179
+ "description": "Awesome description",
180
+ "images": [],
181
+ "published": false,
182
+ "title": "My note title for decryption via keys",
183
+ },
184
+ }
185
+ `;
@@ -0,0 +1,163 @@
1
+ export const armoredPublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
2
+
3
+ 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
50
+ PYl38WJh5gV98/obb+Mp
51
+ =fslD
52
+ -----END PGP PUBLIC KEY BLOCK-----`;
53
+
54
+ export const armoredPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
55
+
56
+ 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
159
+ KQ==
160
+ =OrI7
161
+ -----END PGP PRIVATE KEY BLOCK-----`;
162
+
163
+ export const privateKeyPassphrase = 'test';
@@ -0,0 +1,165 @@
1
+ import {
2
+ encryptViaKeys,
3
+ decryptViaKeys,
4
+ encryptViaPassword,
5
+ decryptViaPassword,
6
+ NoKeysProvidedError,
7
+ NoPasswordProvidedError,
8
+ IncorrectOrMissingPrivateKeyPasswordError,
9
+ } from '../encryption';
10
+ import { test, expect } from 'vitest';
11
+
12
+ import {
13
+ armoredPublicKey,
14
+ armoredPrivateKey,
15
+ privateKeyPassphrase,
16
+ } from './encryption-keys';
17
+
18
+ test('Should encrypt text via keys', async () => {
19
+ const res = await encryptViaKeys(
20
+ 'Hello world',
21
+ armoredPublicKey,
22
+ armoredPrivateKey,
23
+ privateKeyPassphrase
24
+ );
25
+
26
+ expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
27
+ });
28
+
29
+ test('Should decrypt via provided keys', async () => {
30
+ const decryptedMessage = await decryptViaKeys(
31
+ `-----BEGIN PGP MESSAGE-----
32
+
33
+ wcFMA/vryg+TTn0rARAAhXuEjOHa856iCNVmdeIGHF+IEoeEwTc5tIcr6Lri
34
+ V6xs//3WnwVwUlyxYrum3yCpx8t5gyWTXFfTNH08VoVqPVP45fkk1H7jdC6Q
35
+ I+tHfn8nXZApdKQlMOku+XMXtRuqvOUQHutqHj4ka3qC+wGIPcOsy2TIoFsS
36
+ xauk13hMggmVHOdQkMzWA1QlxDcz6lFl86SvX18uc7H62s36gHxARmOLZfBd
37
+ nRFdnPgLKNOPGWb6QvYfvxiv03vGSsKlb0tIpwP1Ot0nyZax+yH9CJmIEni/
38
+ rW9Wu/Ph+PRcB2L9kp/X4Opol3RwJ0lI9ilTRw9+GGFipXhCmJcjPJC7WNIg
39
+ vg0/xVUjSmlxQQAZlC9/sefvoXjY0CP+h+djtoZsxLpN4P4iTO1reuoVD0iO
40
+ UwT9JCUR1uDEiNXvh6AmrLlH3ceBynJcBtHXAnx1vcgtY8oKKYBjsoTeEngg
41
+ P5w5ZXcceoPuYLe6g1YPsFECAgGF+e/QuZ9CCfUgr4o7nSteHQRShP2gXZzc
42
+ oHKR4tiV71VVGKzv0EYhCvVt9NGkxIklft9Lq4ZOXeT9QOnJ/7gRofX2veg2
43
+ TpBADPJ/JvBRcxGEe7KUpYb6Hjr5LRfPOBnH3NK1zMJlqgUHt4ZZSVPxfr9I
44
+ 6hWwsKxizzQ9gwEnDMciUvtX1tMF8+NiH7B0Ho4QVLfSwcEBwsGjA0yq08I/
45
+ 7jK5LGtM8T3xtIW7yZ2binWbAFL6rnbOXjtmI31m4OxCEHW4CVBAV3/lUZlT
46
+ 1eCPXEk32h39nDZHExjSeiUcGevCek5RvIvkhlnURzdZ69/BdZN5hr6LEOAe
47
+ O3UtE9mpvyNFKK9NZsn+ckR1fxK1K4yUiX+dtLjL+x+B38EQE0gjA+ekpfUe
48
+ dv7XD/ZAny66mAcwMn+lQozabpeEaNYIY7D8QspCvZWOS+borK/PVRJkF6pT
49
+ ZBmKzI4mvzDTFsd7VguB7frpsb+agUvhXXAJEHWEE4ZR3vQa1sWEnmxyAdNp
50
+ H9UFoIhGf9mSPlbBTMKEcAJmqzEIrb6z4psmmt6oYLXDR8PCxxK+g0xdrmbO
51
+ Az//AD0eRm8XHCHpwGf8YYWrNHOidDYpgmJTy7qFUwknWS+t3NlkU3CsCR+j
52
+ i9Km3edjOwPpJtgI0LeRRqXs3eUhLQARC5nFePbRWnFSXPBuFxBVZyL9AYrS
53
+ KQn4dM1p4eTtsiEu1NaTzRtQNZAFHcJpZ8qAL67LHoNdFe/atpCdlyV3yur9
54
+ RvAA3cB7cj7wab3beX+cTqxdhpGePZh0TrNd3liV69FtbnYfeDrtUYIL1jfT
55
+ EJN3l+qpveimyX655RrgFX3DNGrVbbhpx+FDF9Ky9kqb2BJBTFKoCBxbf0dS
56
+ sniNAsC/t/k6ErG8NKNQsNh1aeN6plXnxeVi1vv6SvO2mwZRVvDNT1hg9Cyc
57
+ UO1Pw43TRLO50HgR9+ERNXL491TJA0aCj14oXwsm0Dtg6EOltX0GUDwcPjv6
58
+ 6QMreKTATPLytbhCdPO+JOzObsptU/IlsQQWlMz8yKXwqyuN8z8SOaddJIHR
59
+ YQ==
60
+ =f4F1
61
+ -----END PGP MESSAGE-----
62
+ `,
63
+ armoredPrivateKey,
64
+ privateKeyPassphrase
65
+ );
66
+ expect(decryptedMessage).toEqual('Hello world');
67
+ });
68
+
69
+ test('Should encrypt via password', async () => {
70
+ const password = 'test';
71
+ const res = await encryptViaPassword('Hello world', password);
72
+
73
+ expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
74
+ });
75
+
76
+ test('Should decrypt via password', async () => {
77
+ const password = 'test';
78
+ const encryptedMsg = `-----BEGIN PGP MESSAGE-----
79
+
80
+ wy4ECQMI6KFWGqyVV+DgYl0qUEeTe1kAdjkoR4FxFJxx+6QiOP+sZ6h7bn//
81
+ aGW80jwBXEQ7uTjT8akpOKiH7BIuhEUZIXh+vDveG0Uwf63s2dIklznAEo+E
82
+ 5iO5mEqoXWXg6nAvNxciA56dKuI=
83
+ =B4Tc
84
+ -----END PGP MESSAGE-----
85
+ `;
86
+
87
+ expect(await decryptViaPassword(encryptedMsg, password)).toEqual(
88
+ 'Hello world'
89
+ );
90
+ });
91
+
92
+ test('Should raise incorrect or missing private key error', async () => {
93
+ const encryptedMsg = `-----BEGIN PGP MESSAGE-----
94
+
95
+ wcFMA/vryg+TTn0rARAAhXuEjOHa856iCNVmdeIGHF+IEoeEwTc5tIcr6Lri
96
+ V6xs//3WnwVwUlyxYrum3yCpx8t5gyWTXFfTNH08VoVqPVP45fkk1H7jdC6Q
97
+ I+tHfn8nXZApdKQlMOku+XMXtRuqvOUQHutqHj4ka3qC+wGIPcOsy2TIoFsS
98
+ xauk13hMggmVHOdQkMzWA1QlxDcz6lFl86SvX18uc7H62s36gHxARmOLZfBd
99
+ nRFdnPgLKNOPGWb6QvYfvxiv03vGSsKlb0tIpwP1Ot0nyZax+yH9CJmIEni/
100
+ rW9Wu/Ph+PRcB2L9kp/X4Opol3RwJ0lI9ilTRw9+GGFipXhCmJcjPJC7WNIg
101
+ vg0/xVUjSmlxQQAZlC9/sefvoXjY0CP+h+djtoZsxLpN4P4iTO1reuoVD0iO
102
+ UwT9JCUR1uDEiNXvh6AmrLlH3ceBynJcBtHXAnx1vcgtY8oKKYBjsoTeEngg
103
+ P5w5ZXcceoPuYLe6g1YPsFECAgGF+e/QuZ9CCfUgr4o7nSteHQRShP2gXZzc
104
+ oHKR4tiV71VVGKzv0EYhCvVt9NGkxIklft9Lq4ZOXeT9QOnJ/7gRofX2veg2
105
+ TpBADPJ/JvBRcxGEe7KUpYb6Hjr5LRfPOBnH3NK1zMJlqgUHt4ZZSVPxfr9I
106
+ 6hWwsKxizzQ9gwEnDMciUvtX1tMF8+NiH7B0Ho4QVLfSwcEBwsGjA0yq08I/
107
+ 7jK5LGtM8T3xtIW7yZ2binWbAFL6rnbOXjtmI31m4OxCEHW4CVBAV3/lUZlT
108
+ 1eCPXEk32h39nDZHExjSeiUcGevCek5RvIvkhlnURzdZ69/BdZN5hr6LEOAe
109
+ O3UtE9mpvyNFKK9NZsn+ckR1fxK1K4yUiX+dtLjL+x+B38EQE0gjA+ekpfUe
110
+ dv7XD/ZAny66mAcwMn+lQozabpeEaNYIY7D8QspCvZWOS+borK/PVRJkF6pT
111
+ ZBmKzI4mvzDTFsd7VguB7frpsb+agUvhXXAJEHWEE4ZR3vQa1sWEnmxyAdNp
112
+ H9UFoIhGf9mSPlbBTMKEcAJmqzEIrb6z4psmmt6oYLXDR8PCxxK+g0xdrmbO
113
+ Az//AD0eRm8XHCHpwGf8YYWrNHOidDYpgmJTy7qFUwknWS+t3NlkU3CsCR+j
114
+ i9Km3edjOwPpJtgI0LeRRqXs3eUhLQARC5nFePbRWnFSXPBuFxBVZyL9AYrS
115
+ KQn4dM1p4eTtsiEu1NaTzRtQNZAFHcJpZ8qAL67LHoNdFe/atpCdlyV3yur9
116
+ RvAA3cB7cj7wab3beX+cTqxdhpGePZh0TrNd3liV69FtbnYfeDrtUYIL1jfT
117
+ EJN3l+qpveimyX655RrgFX3DNGrVbbhpx+FDF9Ky9kqb2BJBTFKoCBxbf0dS
118
+ sniNAsC/t/k6ErG8NKNQsNh1aeN6plXnxeVi1vv6SvO2mwZRVvDNT1hg9Cyc
119
+ UO1Pw43TRLO50HgR9+ERNXL491TJA0aCj14oXwsm0Dtg6EOltX0GUDwcPjv6
120
+ 6QMreKTATPLytbhCdPO+JOzObsptU/IlsQQWlMz8yKXwqyuN8z8SOaddJIHR
121
+ YQ==
122
+ =f4F1
123
+ -----END PGP MESSAGE-----`;
124
+
125
+ try {
126
+ await decryptViaPassword(encryptedMsg, 'password');
127
+ } catch (e) {
128
+ expect(e).toBeInstanceOf(NoKeysProvidedError);
129
+ }
130
+ });
131
+
132
+ test('Should raise IncorrectOrMissingPrivateKeyPasswordError error when incorrect armored key provided', async () => {
133
+ const password = 'test';
134
+ const encryptedMsg = `-----BEGIN PGP MESSAGE-----
135
+
136
+ wy4ECQMI6KFWGqyVV+DgYl0qUEeTe1kAdjkoR4FxFJxx+6QiOP+sZ6h7bn//
137
+ aGW80jwBXEQ7uTjT8akpOKiH7BIuhEUZIXh+vDveG0Uwf63s2dIklznAEo+E
138
+ 5iO5mEqoXWXg6nAvNxciA56dKuI=
139
+ =B4Tc
140
+ -----END PGP MESSAGE-----
141
+ `;
142
+
143
+ try {
144
+ await decryptViaKeys(encryptedMsg, armoredPublicKey, privateKeyPassphrase);
145
+ } catch (e) {
146
+ expect(e).toBeInstanceOf(IncorrectOrMissingPrivateKeyPasswordError);
147
+ }
148
+ });
149
+
150
+ test('Should raise NoPasswordProvidedError error when try to use keys instead of password', async () => {
151
+ const encryptedMsg = `-----BEGIN PGP MESSAGE-----
152
+
153
+ wy4ECQMI6KFWGqyVV+DgYl0qUEeTe1kAdjkoR4FxFJxx+6QiOP+sZ6h7bn//
154
+ aGW80jwBXEQ7uTjT8akpOKiH7BIuhEUZIXh+vDveG0Uwf63s2dIklznAEo+E
155
+ 5iO5mEqoXWXg6nAvNxciA56dKuI=
156
+ =B4Tc
157
+ -----END PGP MESSAGE-----
158
+ `;
159
+
160
+ try {
161
+ await decryptViaKeys(encryptedMsg, armoredPrivateKey, privateKeyPassphrase);
162
+ } catch (e) {
163
+ expect(e).toBeInstanceOf(NoPasswordProvidedError);
164
+ }
165
+ });