orgnote-api 0.17.1 → 0.17.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.
- package/dist/api.d.ts +112 -0
- package/dist/api.js +1 -0
- package/dist/encryption/__tests__/encryption-keys.d.ts +3 -0
- package/{encryption/__tests__/encryption-keys.ts → dist/encryption/__tests__/encryption-keys.js} +0 -2
- package/dist/encryption/__tests__/encryption.spec.d.ts +1 -0
- package/dist/encryption/__tests__/encryption.spec.js +287 -0
- package/dist/encryption/__tests__/note-encryption.spec.d.ts +1 -0
- package/dist/encryption/__tests__/note-encryption.spec.js +364 -0
- package/dist/encryption/encryption.d.ts +27 -0
- package/dist/encryption/encryption.js +156 -0
- package/dist/encryption/index.js +2 -0
- package/dist/encryption/note-encryption.d.ts +12 -0
- package/dist/encryption/note-encryption.js +42 -0
- package/dist/files-api.d.ts +7 -0
- package/dist/files-api.js +22 -0
- package/dist/index.js +5 -0
- package/dist/models/command.d.ts +29 -0
- package/dist/models/command.js +1 -0
- package/dist/models/completion.d.ts +22 -0
- package/dist/models/completion.js +1 -0
- package/dist/models/default-commands.d.ts +30 -0
- package/dist/models/default-commands.js +41 -0
- package/dist/models/editor.d.ts +23 -0
- package/dist/models/editor.js +1 -0
- package/dist/models/encryption.d.ts +31 -0
- package/dist/models/encryption.js +1 -0
- package/dist/models/extension.d.ts +34 -0
- package/dist/models/extension.js +1 -0
- package/dist/models/file-system.d.ts +23 -0
- package/dist/models/file-system.js +1 -0
- package/dist/models/index.js +13 -0
- package/dist/models/modal.d.ts +10 -0
- package/dist/models/modal.js +1 -0
- package/dist/models/note.d.ts +23 -0
- package/dist/models/note.js +1 -0
- package/dist/models/sync.d.ts +34 -0
- package/dist/models/sync.js +1 -0
- package/dist/models/theme-variables.d.ts +192 -0
- package/dist/models/theme-variables.js +194 -0
- package/{models/vue-component.ts → dist/models/vue-component.d.ts} +1 -1
- package/dist/models/vue-component.js +1 -0
- package/dist/models/widget-type.d.ts +5 -0
- package/dist/models/widget-type.js +6 -0
- package/dist/models/widget.d.ts +51 -0
- package/dist/models/widget.js +1 -0
- package/dist/remote-api/api.d.ts +1525 -0
- package/{remote-api/api.ts → dist/remote-api/api.js} +246 -1149
- package/dist/remote-api/base.d.ts +66 -0
- package/{remote-api/base.ts → dist/remote-api/base.js} +13 -36
- package/dist/remote-api/common.d.ts +65 -0
- package/{remote-api/common.ts → dist/remote-api/common.js} +31 -48
- package/{remote-api/configuration.ts → dist/remote-api/configuration.d.ts} +3 -22
- package/dist/remote-api/configuration.js +95 -0
- package/dist/remote-api/index.d.ts +13 -0
- package/{remote-api/index.ts → dist/remote-api/index.js} +0 -3
- package/dist/tools/__tests__/find-files-diff.spec.d.ts +1 -0
- package/dist/tools/__tests__/find-files-diff.spec.js +110 -0
- package/dist/tools/__tests__/find-note-files-diff.spec.d.ts +1 -0
- package/dist/tools/__tests__/find-note-files-diff.spec.js +168 -0
- package/dist/tools/__tests__/get-file-name.spec.d.ts +1 -0
- package/{tools/__tests__/get-file-name.spec.ts → dist/tools/__tests__/get-file-name.spec.js} +4 -8
- package/dist/tools/__tests__/get-string-path.spec.d.ts +1 -0
- package/dist/tools/__tests__/get-string-path.spec.js +27 -0
- package/dist/tools/__tests__/is-gpg-encrypted.spec.d.ts +1 -0
- package/{tools/__tests__/is-gpg-encrypted.spec.ts → dist/tools/__tests__/is-gpg-encrypted.spec.js} +4 -8
- package/dist/tools/__tests__/is-org-file.spec.d.ts +1 -0
- package/dist/tools/__tests__/is-org-file.spec.js +54 -0
- package/dist/tools/__tests__/join.spec.d.ts +1 -0
- package/dist/tools/__tests__/join.spec.js +14 -0
- package/dist/tools/__tests__/read-org-files-recursively.spec.d.ts +1 -0
- package/dist/tools/__tests__/read-org-files-recursively.spec.js +51 -0
- package/dist/tools/extend-notes-files-diff.d.ts +3 -0
- package/dist/tools/extend-notes-files-diff.js +21 -0
- package/dist/tools/find-notes-files-diff.d.ts +5 -0
- package/dist/tools/find-notes-files-diff.js +108 -0
- package/dist/tools/get-file-name.d.ts +2 -0
- package/dist/tools/get-file-name.js +6 -0
- package/dist/tools/get-string-path.d.ts +1 -0
- package/dist/tools/get-string-path.js +6 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/is-gpg-encrypted.d.ts +1 -0
- package/dist/tools/is-gpg-encrypted.js +6 -0
- package/dist/tools/is-org-file.d.ts +2 -0
- package/dist/tools/is-org-file.js +4 -0
- package/dist/tools/join.d.ts +1 -0
- package/dist/tools/join.js +3 -0
- package/dist/tools/mock-server.d.ts +1 -0
- package/dist/tools/mock-server.js +12 -0
- package/package.json +6 -14
- package/api.ts +0 -123
- package/encryption/__tests__/__snapshots__/note-encryption.spec.ts.snap +0 -215
- package/encryption/__tests__/encryption.spec.ts +0 -355
- package/encryption/__tests__/note-encryption.spec.ts +0 -424
- package/encryption/encryption.ts +0 -265
- package/encryption/note-encryption.ts +0 -78
- package/files-api.ts +0 -25
- package/models/command.ts +0 -45
- package/models/completion.ts +0 -30
- package/models/default-commands.ts +0 -44
- package/models/editor.ts +0 -27
- package/models/encryption.ts +0 -54
- package/models/extension.ts +0 -45
- package/models/file-system.ts +0 -30
- package/models/modal.ts +0 -12
- package/models/note.ts +0 -26
- package/models/sync.ts +0 -43
- package/models/theme-variables.ts +0 -194
- package/models/widget-type.ts +0 -5
- package/models/widget.ts +0 -59
- package/remote-api/.gitignore +0 -4
- package/remote-api/.npmignore +0 -1
- package/remote-api/.openapi-generator/FILES +0 -8
- package/remote-api/.openapi-generator/VERSION +0 -1
- package/remote-api/.openapi-generator-ignore +0 -23
- package/remote-api/git_push.sh +0 -57
- package/tools/__tests__/__snapshots__/join.spec.ts.snap +0 -9
- package/tools/__tests__/find-files-diff.spec.ts +0 -177
- package/tools/__tests__/find-note-files-diff.spec.ts +0 -207
- package/tools/__tests__/get-string-path.spec.ts +0 -32
- package/tools/__tests__/is-org-file.spec.ts +0 -62
- package/tools/__tests__/join.spec.ts +0 -16
- package/tools/__tests__/read-org-files-recursively.spec.ts +0 -61
- package/tools/extend-notes-files-diff.ts +0 -35
- package/tools/find-notes-files-diff.ts +0 -185
- package/tools/get-file-name.ts +0 -7
- package/tools/get-string-path.ts +0 -6
- package/tools/is-gpg-encrypted.ts +0 -6
- package/tools/is-org-file.ts +0 -7
- package/tools/join.ts +0 -3
- package/tools/mock-server.ts +0 -16
- /package/{encryption/index.ts → dist/encryption/index.d.ts} +0 -0
- /package/{index.ts → dist/index.d.ts} +0 -0
- /package/{models/index.ts → dist/models/index.d.ts} +0 -0
- /package/{tools/index.ts → dist/tools/index.d.ts} +0 -0
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Command, CSSVariable, ThemeVariable, Note, InlineEmbeddedWidget, MultilineEmbeddedWidget, OrgLineClass, WidgetBuilder, CommandPreview, OrgNoteEncryption, Modal } from './models';
|
|
2
|
+
import type { NavigationFailure } from 'vue-router';
|
|
3
|
+
import { WidgetType } from './models/widget-type';
|
|
4
|
+
import type { Component } from 'vue';
|
|
5
|
+
import { NodeType } from 'org-mode-ast';
|
|
6
|
+
import { EditorExtension } from './models/editor';
|
|
7
|
+
type WithNodeType<T> = {
|
|
8
|
+
nodeType: NodeType;
|
|
9
|
+
} & T;
|
|
10
|
+
export type WidgetMeta = ({
|
|
11
|
+
type: WidgetType.Inline;
|
|
12
|
+
} & WithNodeType<InlineEmbeddedWidget>) | ({
|
|
13
|
+
type: WidgetType.Multiline;
|
|
14
|
+
} & WithNodeType<MultilineEmbeddedWidget>) | ({
|
|
15
|
+
type: WidgetType.LineClass;
|
|
16
|
+
} & WithNodeType<OrgLineClass>);
|
|
17
|
+
export interface OrgNoteApi {
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
getExtension?<T>(config: string): T;
|
|
20
|
+
system: {
|
|
21
|
+
reload: (params?: {
|
|
22
|
+
verbose: boolean;
|
|
23
|
+
}) => Promise<void>;
|
|
24
|
+
setNewFilesAvailable: (status?: boolean) => void;
|
|
25
|
+
};
|
|
26
|
+
navigation: {
|
|
27
|
+
openNote: (id: string) => Promise<void | NavigationFailure>;
|
|
28
|
+
editNote: (id: string) => Promise<void | NavigationFailure>;
|
|
29
|
+
};
|
|
30
|
+
ui: {
|
|
31
|
+
applyTheme: (theme: {
|
|
32
|
+
[key in ThemeVariable]: string | number;
|
|
33
|
+
}) => void;
|
|
34
|
+
applyCssVariables: (styles: {
|
|
35
|
+
[key in CSSVariable]: string | number;
|
|
36
|
+
}) => void;
|
|
37
|
+
setThemeByMode: (themeName?: string) => void;
|
|
38
|
+
setDarkTheme: (themeName?: string) => void;
|
|
39
|
+
setLightTheme: (themeName?: string) => void;
|
|
40
|
+
applyStyles: (scopeName: string, styles: string) => void;
|
|
41
|
+
removeStyles: (scopeName: string) => void;
|
|
42
|
+
resetTheme: () => void;
|
|
43
|
+
openModal: (modal: Modal) => void;
|
|
44
|
+
};
|
|
45
|
+
interaction: {
|
|
46
|
+
confirm: (title: string, message: string) => Promise<boolean>;
|
|
47
|
+
};
|
|
48
|
+
currentNote: {
|
|
49
|
+
get: () => Note;
|
|
50
|
+
};
|
|
51
|
+
editor: {
|
|
52
|
+
extensions: {
|
|
53
|
+
add: (...extension: EditorExtension[]) => void;
|
|
54
|
+
remove: (...extension: EditorExtension[]) => void;
|
|
55
|
+
};
|
|
56
|
+
widgets: {
|
|
57
|
+
add: (...widgetMeta: WidgetMeta[]) => void;
|
|
58
|
+
createWidgetBuilder: (cmp: Component, props?: {
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}) => WidgetBuilder;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
fileSystem: {
|
|
64
|
+
readPath: () => Promise<string>;
|
|
65
|
+
};
|
|
66
|
+
commands: {
|
|
67
|
+
add(...commands: Command[]): void;
|
|
68
|
+
remove(...commands: Command[]): void;
|
|
69
|
+
get(name: string): Command;
|
|
70
|
+
getAll(): Command[];
|
|
71
|
+
addCommandToSidebar(...commands: CommandPreview[]): void;
|
|
72
|
+
removeCommandFromSidebar(...commands: CommandPreview[]): void;
|
|
73
|
+
addCommandToEditorPanel(...commands: CommandPreview[]): void;
|
|
74
|
+
removeCommandFromEditorPanel(...commands: CommandPreview[]): void;
|
|
75
|
+
};
|
|
76
|
+
configuration: () => OrgNoteConfig;
|
|
77
|
+
}
|
|
78
|
+
export interface OrgNoteConfig {
|
|
79
|
+
editor: {
|
|
80
|
+
showSpecialSymbols: boolean;
|
|
81
|
+
showPropertyDrawer: boolean;
|
|
82
|
+
};
|
|
83
|
+
developer: {
|
|
84
|
+
developerMode: boolean;
|
|
85
|
+
maximumLogsCount: number;
|
|
86
|
+
};
|
|
87
|
+
completion: {
|
|
88
|
+
showGroup: boolean;
|
|
89
|
+
defaultCompletionLimit: number;
|
|
90
|
+
};
|
|
91
|
+
system: {
|
|
92
|
+
language: string;
|
|
93
|
+
};
|
|
94
|
+
synchronization: {
|
|
95
|
+
type: 'none' | 'api';
|
|
96
|
+
};
|
|
97
|
+
vault: {
|
|
98
|
+
type: 'inmemory' | 'filesystem';
|
|
99
|
+
path?: string;
|
|
100
|
+
};
|
|
101
|
+
ui: {
|
|
102
|
+
showUserProfiles: boolean;
|
|
103
|
+
theme: 'light' | 'dark' | 'auto';
|
|
104
|
+
darkThemeName?: string;
|
|
105
|
+
lightThemeName?: string;
|
|
106
|
+
};
|
|
107
|
+
extensions: {
|
|
108
|
+
sources: string[];
|
|
109
|
+
};
|
|
110
|
+
encryption: OrgNoteEncryption;
|
|
111
|
+
}
|
|
112
|
+
export {};
|
package/dist/api.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const armoredPublicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n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\nPYl38WJh5gV98/obb+Mp\n=fslD\n-----END PGP PUBLIC KEY BLOCK-----";
|
|
2
|
+
export declare const armoredPrivateKey = "-----BEGIN PGP PRIVATE KEY BLOCK-----\n\n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\nKQ==\n=OrI7\n-----END PGP PRIVATE KEY BLOCK-----";
|
|
3
|
+
export declare const privateKeyPassphrase = "test";
|
package/{encryption/__tests__/encryption-keys.ts → dist/encryption/__tests__/encryption-keys.js}
RENAMED
|
@@ -50,7 +50,6 @@ i9M1qY7gk2elhW/+2IWifgTJfmlvNaqWCyqH/FrRyj8fw0/JUCKlNPwt9ITm9ffm
|
|
|
50
50
|
PYl38WJh5gV98/obb+Mp
|
|
51
51
|
=fslD
|
|
52
52
|
-----END PGP PUBLIC KEY BLOCK-----`;
|
|
53
|
-
|
|
54
53
|
export const armoredPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
|
|
55
54
|
|
|
56
55
|
lQdGBGYaZm0BEADfaOXr8cXcU3esPh7gBRqgdUNl/qNFVUOkfoaxMK0m2uDrI03w
|
|
@@ -159,5 +158,4 @@ on4EyX5pbzWqlgsqh/xa0co/H8NPyVAipTT8LfSE5vX35j2Jd/FiYeYFffP6G2/j
|
|
|
159
158
|
KQ==
|
|
160
159
|
=OrI7
|
|
161
160
|
-----END PGP PRIVATE KEY BLOCK-----`;
|
|
162
|
-
|
|
163
161
|
export const privateKeyPassphrase = 'test';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { encryptViaKeys, decryptViaKeys, encryptViaPassword, decryptViaPassword, NoKeysProvidedError, NoPasswordProvidedError, IncorrectOrMissingPrivateKeyPasswordError, encrypt, decrypt, armor, unarmor, } from '../encryption';
|
|
2
|
+
import { test, expect } from 'vitest';
|
|
3
|
+
import { armoredPublicKey, armoredPrivateKey, privateKeyPassphrase, } from './encryption-keys';
|
|
4
|
+
import { ModelsPublicNoteEncryptionTypeEnum } from 'src/remote-api';
|
|
5
|
+
test('Should encrypt text as armored message via keys', async () => {
|
|
6
|
+
const res = await encryptViaKeys({
|
|
7
|
+
type: ModelsPublicNoteEncryptionTypeEnum.GpgKeys,
|
|
8
|
+
content: 'Hello world',
|
|
9
|
+
publicKey: armoredPublicKey,
|
|
10
|
+
privateKey: armoredPrivateKey,
|
|
11
|
+
privateKeyPassphrase: privateKeyPassphrase,
|
|
12
|
+
format: 'armored',
|
|
13
|
+
});
|
|
14
|
+
expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
test('Should encrypt text via keys', async () => {
|
|
17
|
+
const res = await encryptViaKeys({
|
|
18
|
+
type: ModelsPublicNoteEncryptionTypeEnum.GpgKeys,
|
|
19
|
+
content: 'Hello world',
|
|
20
|
+
publicKey: armoredPublicKey,
|
|
21
|
+
privateKey: armoredPrivateKey,
|
|
22
|
+
privateKeyPassphrase,
|
|
23
|
+
format: 'armored',
|
|
24
|
+
});
|
|
25
|
+
expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
test('Should decrypt via provided keys', async () => {
|
|
28
|
+
const decryptedMessage = await decryptViaKeys({
|
|
29
|
+
content: `-----BEGIN PGP MESSAGE-----
|
|
30
|
+
|
|
31
|
+
wcFMA/vryg+TTn0rARAAhXuEjOHa856iCNVmdeIGHF+IEoeEwTc5tIcr6Lri
|
|
32
|
+
V6xs//3WnwVwUlyxYrum3yCpx8t5gyWTXFfTNH08VoVqPVP45fkk1H7jdC6Q
|
|
33
|
+
I+tHfn8nXZApdKQlMOku+XMXtRuqvOUQHutqHj4ka3qC+wGIPcOsy2TIoFsS
|
|
34
|
+
xauk13hMggmVHOdQkMzWA1QlxDcz6lFl86SvX18uc7H62s36gHxARmOLZfBd
|
|
35
|
+
nRFdnPgLKNOPGWb6QvYfvxiv03vGSsKlb0tIpwP1Ot0nyZax+yH9CJmIEni/
|
|
36
|
+
rW9Wu/Ph+PRcB2L9kp/X4Opol3RwJ0lI9ilTRw9+GGFipXhCmJcjPJC7WNIg
|
|
37
|
+
vg0/xVUjSmlxQQAZlC9/sefvoXjY0CP+h+djtoZsxLpN4P4iTO1reuoVD0iO
|
|
38
|
+
UwT9JCUR1uDEiNXvh6AmrLlH3ceBynJcBtHXAnx1vcgtY8oKKYBjsoTeEngg
|
|
39
|
+
P5w5ZXcceoPuYLe6g1YPsFECAgGF+e/QuZ9CCfUgr4o7nSteHQRShP2gXZzc
|
|
40
|
+
oHKR4tiV71VVGKzv0EYhCvVt9NGkxIklft9Lq4ZOXeT9QOnJ/7gRofX2veg2
|
|
41
|
+
TpBADPJ/JvBRcxGEe7KUpYb6Hjr5LRfPOBnH3NK1zMJlqgUHt4ZZSVPxfr9I
|
|
42
|
+
6hWwsKxizzQ9gwEnDMciUvtX1tMF8+NiH7B0Ho4QVLfSwcEBwsGjA0yq08I/
|
|
43
|
+
7jK5LGtM8T3xtIW7yZ2binWbAFL6rnbOXjtmI31m4OxCEHW4CVBAV3/lUZlT
|
|
44
|
+
1eCPXEk32h39nDZHExjSeiUcGevCek5RvIvkhlnURzdZ69/BdZN5hr6LEOAe
|
|
45
|
+
O3UtE9mpvyNFKK9NZsn+ckR1fxK1K4yUiX+dtLjL+x+B38EQE0gjA+ekpfUe
|
|
46
|
+
dv7XD/ZAny66mAcwMn+lQozabpeEaNYIY7D8QspCvZWOS+borK/PVRJkF6pT
|
|
47
|
+
ZBmKzI4mvzDTFsd7VguB7frpsb+agUvhXXAJEHWEE4ZR3vQa1sWEnmxyAdNp
|
|
48
|
+
H9UFoIhGf9mSPlbBTMKEcAJmqzEIrb6z4psmmt6oYLXDR8PCxxK+g0xdrmbO
|
|
49
|
+
Az//AD0eRm8XHCHpwGf8YYWrNHOidDYpgmJTy7qFUwknWS+t3NlkU3CsCR+j
|
|
50
|
+
i9Km3edjOwPpJtgI0LeRRqXs3eUhLQARC5nFePbRWnFSXPBuFxBVZyL9AYrS
|
|
51
|
+
KQn4dM1p4eTtsiEu1NaTzRtQNZAFHcJpZ8qAL67LHoNdFe/atpCdlyV3yur9
|
|
52
|
+
RvAA3cB7cj7wab3beX+cTqxdhpGePZh0TrNd3liV69FtbnYfeDrtUYIL1jfT
|
|
53
|
+
EJN3l+qpveimyX655RrgFX3DNGrVbbhpx+FDF9Ky9kqb2BJBTFKoCBxbf0dS
|
|
54
|
+
sniNAsC/t/k6ErG8NKNQsNh1aeN6plXnxeVi1vv6SvO2mwZRVvDNT1hg9Cyc
|
|
55
|
+
UO1Pw43TRLO50HgR9+ERNXL491TJA0aCj14oXwsm0Dtg6EOltX0GUDwcPjv6
|
|
56
|
+
6QMreKTATPLytbhCdPO+JOzObsptU/IlsQQWlMz8yKXwqyuN8z8SOaddJIHR
|
|
57
|
+
YQ==
|
|
58
|
+
=f4F1
|
|
59
|
+
-----END PGP MESSAGE-----
|
|
60
|
+
`,
|
|
61
|
+
privateKey: armoredPrivateKey,
|
|
62
|
+
privateKeyPassphrase,
|
|
63
|
+
});
|
|
64
|
+
expect(decryptedMessage).toEqual('Hello world');
|
|
65
|
+
});
|
|
66
|
+
test('Should encrypt via password', async () => {
|
|
67
|
+
const password = 'test';
|
|
68
|
+
const res = await encryptViaPassword({
|
|
69
|
+
type: ModelsPublicNoteEncryptionTypeEnum.GpgPassword,
|
|
70
|
+
content: 'Hello world',
|
|
71
|
+
password,
|
|
72
|
+
format: 'armored',
|
|
73
|
+
});
|
|
74
|
+
expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
|
|
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
|
+
expect(await decryptViaPassword({ content: encryptedMsg, password })).toEqual('Hello world');
|
|
87
|
+
});
|
|
88
|
+
test('Should raise incorrect or missing private key error', async () => {
|
|
89
|
+
const encryptedMsg = `-----BEGIN PGP MESSAGE-----
|
|
90
|
+
|
|
91
|
+
wcFMA/vryg+TTn0rARAAhXuEjOHa856iCNVmdeIGHF+IEoeEwTc5tIcr6Lri
|
|
92
|
+
V6xs//3WnwVwUlyxYrum3yCpx8t5gyWTXFfTNH08VoVqPVP45fkk1H7jdC6Q
|
|
93
|
+
I+tHfn8nXZApdKQlMOku+XMXtRuqvOUQHutqHj4ka3qC+wGIPcOsy2TIoFsS
|
|
94
|
+
xauk13hMggmVHOdQkMzWA1QlxDcz6lFl86SvX18uc7H62s36gHxARmOLZfBd
|
|
95
|
+
nRFdnPgLKNOPGWb6QvYfvxiv03vGSsKlb0tIpwP1Ot0nyZax+yH9CJmIEni/
|
|
96
|
+
rW9Wu/Ph+PRcB2L9kp/X4Opol3RwJ0lI9ilTRw9+GGFipXhCmJcjPJC7WNIg
|
|
97
|
+
vg0/xVUjSmlxQQAZlC9/sefvoXjY0CP+h+djtoZsxLpN4P4iTO1reuoVD0iO
|
|
98
|
+
UwT9JCUR1uDEiNXvh6AmrLlH3ceBynJcBtHXAnx1vcgtY8oKKYBjsoTeEngg
|
|
99
|
+
P5w5ZXcceoPuYLe6g1YPsFECAgGF+e/QuZ9CCfUgr4o7nSteHQRShP2gXZzc
|
|
100
|
+
oHKR4tiV71VVGKzv0EYhCvVt9NGkxIklft9Lq4ZOXeT9QOnJ/7gRofX2veg2
|
|
101
|
+
TpBADPJ/JvBRcxGEe7KUpYb6Hjr5LRfPOBnH3NK1zMJlqgUHt4ZZSVPxfr9I
|
|
102
|
+
6hWwsKxizzQ9gwEnDMciUvtX1tMF8+NiH7B0Ho4QVLfSwcEBwsGjA0yq08I/
|
|
103
|
+
7jK5LGtM8T3xtIW7yZ2binWbAFL6rnbOXjtmI31m4OxCEHW4CVBAV3/lUZlT
|
|
104
|
+
1eCPXEk32h39nDZHExjSeiUcGevCek5RvIvkhlnURzdZ69/BdZN5hr6LEOAe
|
|
105
|
+
O3UtE9mpvyNFKK9NZsn+ckR1fxK1K4yUiX+dtLjL+x+B38EQE0gjA+ekpfUe
|
|
106
|
+
dv7XD/ZAny66mAcwMn+lQozabpeEaNYIY7D8QspCvZWOS+borK/PVRJkF6pT
|
|
107
|
+
ZBmKzI4mvzDTFsd7VguB7frpsb+agUvhXXAJEHWEE4ZR3vQa1sWEnmxyAdNp
|
|
108
|
+
H9UFoIhGf9mSPlbBTMKEcAJmqzEIrb6z4psmmt6oYLXDR8PCxxK+g0xdrmbO
|
|
109
|
+
Az//AD0eRm8XHCHpwGf8YYWrNHOidDYpgmJTy7qFUwknWS+t3NlkU3CsCR+j
|
|
110
|
+
i9Km3edjOwPpJtgI0LeRRqXs3eUhLQARC5nFePbRWnFSXPBuFxBVZyL9AYrS
|
|
111
|
+
KQn4dM1p4eTtsiEu1NaTzRtQNZAFHcJpZ8qAL67LHoNdFe/atpCdlyV3yur9
|
|
112
|
+
RvAA3cB7cj7wab3beX+cTqxdhpGePZh0TrNd3liV69FtbnYfeDrtUYIL1jfT
|
|
113
|
+
EJN3l+qpveimyX655RrgFX3DNGrVbbhpx+FDF9Ky9kqb2BJBTFKoCBxbf0dS
|
|
114
|
+
sniNAsC/t/k6ErG8NKNQsNh1aeN6plXnxeVi1vv6SvO2mwZRVvDNT1hg9Cyc
|
|
115
|
+
UO1Pw43TRLO50HgR9+ERNXL491TJA0aCj14oXwsm0Dtg6EOltX0GUDwcPjv6
|
|
116
|
+
6QMreKTATPLytbhCdPO+JOzObsptU/IlsQQWlMz8yKXwqyuN8z8SOaddJIHR
|
|
117
|
+
YQ==
|
|
118
|
+
=f4F1
|
|
119
|
+
-----END PGP MESSAGE-----`;
|
|
120
|
+
try {
|
|
121
|
+
await decryptViaPassword({ content: encryptedMsg, password: 'password' });
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
expect(e).toBeInstanceOf(NoKeysProvidedError);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
test('Should raise IncorrectOrMissingPrivateKeyPasswordError error when incorrect armored key provided', async () => {
|
|
128
|
+
const encryptedMsg = `-----BEGIN PGP MESSAGE-----
|
|
129
|
+
|
|
130
|
+
wy4ECQMI6KFWGqyVV+DgYl0qUEeTe1kAdjkoR4FxFJxx+6QiOP+sZ6h7bn//
|
|
131
|
+
aGW80jwBXEQ7uTjT8akpOKiH7BIuhEUZIXh+vDveG0Uwf63s2dIklznAEo+E
|
|
132
|
+
5iO5mEqoXWXg6nAvNxciA56dKuI=
|
|
133
|
+
=B4Tc
|
|
134
|
+
-----END PGP MESSAGE-----
|
|
135
|
+
`;
|
|
136
|
+
try {
|
|
137
|
+
await decryptViaKeys({
|
|
138
|
+
content: encryptedMsg,
|
|
139
|
+
publicKey: armoredPublicKey,
|
|
140
|
+
privateKey: privateKeyPassphrase,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
expect(e).toBeInstanceOf(IncorrectOrMissingPrivateKeyPasswordError);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
test('Should raise NoPasswordProvidedError error when try to use keys instead of password', async () => {
|
|
148
|
+
const encryptedMsg = `-----BEGIN PGP MESSAGE-----
|
|
149
|
+
|
|
150
|
+
wy4ECQMI6KFWGqyVV+DgYl0qUEeTe1kAdjkoR4FxFJxx+6QiOP+sZ6h7bn//
|
|
151
|
+
aGW80jwBXEQ7uTjT8akpOKiH7BIuhEUZIXh+vDveG0Uwf63s2dIklznAEo+E
|
|
152
|
+
5iO5mEqoXWXg6nAvNxciA56dKuI=
|
|
153
|
+
=B4Tc
|
|
154
|
+
-----END PGP MESSAGE-----
|
|
155
|
+
`;
|
|
156
|
+
try {
|
|
157
|
+
await decryptViaKeys({
|
|
158
|
+
content: encryptedMsg,
|
|
159
|
+
privateKey: armoredPrivateKey,
|
|
160
|
+
privateKeyPassphrase,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
expect(e).toBeInstanceOf(NoPasswordProvidedError);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
test('Should encrypt and decrypt text by provided configs via password', async () => {
|
|
168
|
+
const text = 'Hello world';
|
|
169
|
+
const password = '123';
|
|
170
|
+
const res = await encrypt({
|
|
171
|
+
content: text,
|
|
172
|
+
type: 'gpgPassword',
|
|
173
|
+
password,
|
|
174
|
+
format: 'armored',
|
|
175
|
+
});
|
|
176
|
+
expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
|
|
177
|
+
const decryptedMessage = await decrypt({
|
|
178
|
+
content: res,
|
|
179
|
+
type: 'gpgPassword',
|
|
180
|
+
password,
|
|
181
|
+
});
|
|
182
|
+
expect(decryptedMessage).toEqual(text);
|
|
183
|
+
});
|
|
184
|
+
test('Should encrypt and decrypt text by provided configs via keys', async () => {
|
|
185
|
+
const text = 'Hello world';
|
|
186
|
+
const res = await encrypt({
|
|
187
|
+
content: text,
|
|
188
|
+
type: 'gpgKeys',
|
|
189
|
+
format: 'armored',
|
|
190
|
+
publicKey: armoredPublicKey,
|
|
191
|
+
privateKey: armoredPrivateKey,
|
|
192
|
+
privateKeyPassphrase,
|
|
193
|
+
});
|
|
194
|
+
expect(res.startsWith('-----BEGIN PGP MESSAGE-----')).toBeTruthy();
|
|
195
|
+
const decryptedMessage = await decrypt({
|
|
196
|
+
content: res,
|
|
197
|
+
type: 'gpgKeys',
|
|
198
|
+
publicKey: armoredPublicKey,
|
|
199
|
+
privateKey: armoredPrivateKey,
|
|
200
|
+
privateKeyPassphrase,
|
|
201
|
+
format: 'utf8',
|
|
202
|
+
});
|
|
203
|
+
expect(decryptedMessage).toEqual(text);
|
|
204
|
+
});
|
|
205
|
+
test('Should encrypt to binary and decrypt to format armored!', async () => {
|
|
206
|
+
const text = 'Hello world';
|
|
207
|
+
const res = await encrypt({
|
|
208
|
+
content: text,
|
|
209
|
+
type: 'gpgPassword',
|
|
210
|
+
password: '123',
|
|
211
|
+
format: 'binary',
|
|
212
|
+
});
|
|
213
|
+
expect(res).toBeInstanceOf(Uint8Array);
|
|
214
|
+
const decryptedMessage = await decrypt({
|
|
215
|
+
content: res,
|
|
216
|
+
type: 'gpgPassword',
|
|
217
|
+
format: 'utf8',
|
|
218
|
+
password: '123',
|
|
219
|
+
});
|
|
220
|
+
expect(decryptedMessage).toEqual(text);
|
|
221
|
+
});
|
|
222
|
+
test('Should encrypt to binary and decrypt to binary format', async () => {
|
|
223
|
+
const text = 'Hello world';
|
|
224
|
+
const res = await encrypt({
|
|
225
|
+
content: text,
|
|
226
|
+
type: 'gpgPassword',
|
|
227
|
+
password: '123',
|
|
228
|
+
format: 'binary',
|
|
229
|
+
});
|
|
230
|
+
expect(res).toBeInstanceOf(Uint8Array);
|
|
231
|
+
const decryptedMessage = await decrypt({
|
|
232
|
+
content: res,
|
|
233
|
+
type: 'gpgPassword',
|
|
234
|
+
format: 'binary',
|
|
235
|
+
password: '123',
|
|
236
|
+
});
|
|
237
|
+
expect(decryptedMessage.toString()).toMatchInlineSnapshot(`"72,101,108,108,111,32,119,111,114,108,100"`);
|
|
238
|
+
});
|
|
239
|
+
test('Should encrypt to armored text and decrypt as binary format', async () => {
|
|
240
|
+
const text = 'Hello world';
|
|
241
|
+
const res = await encrypt({
|
|
242
|
+
content: text,
|
|
243
|
+
type: 'gpgPassword',
|
|
244
|
+
password: '123',
|
|
245
|
+
format: 'armored',
|
|
246
|
+
});
|
|
247
|
+
expect(res).toBeTypeOf('string');
|
|
248
|
+
const decryptedMessage = await decrypt({
|
|
249
|
+
content: res,
|
|
250
|
+
type: 'gpgPassword',
|
|
251
|
+
format: 'binary',
|
|
252
|
+
password: '123',
|
|
253
|
+
});
|
|
254
|
+
expect(decryptedMessage).toBeInstanceOf(Uint8Array);
|
|
255
|
+
});
|
|
256
|
+
test('Should armor and unarmor encrypted file', async () => {
|
|
257
|
+
const content = new Uint8Array([
|
|
258
|
+
72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100,
|
|
259
|
+
]);
|
|
260
|
+
const armored = armor(content);
|
|
261
|
+
expect(armored).toMatchInlineSnapshot(`
|
|
262
|
+
"-----BEGIN PGP MESSAGE-----
|
|
263
|
+
|
|
264
|
+
SGVsbG8gd29ybGQ=
|
|
265
|
+
=7asC
|
|
266
|
+
-----END PGP MESSAGE-----
|
|
267
|
+
"
|
|
268
|
+
`);
|
|
269
|
+
const { data } = await unarmor(armored);
|
|
270
|
+
expect(data).toEqual(content);
|
|
271
|
+
});
|
|
272
|
+
test('Should decrypt value from provided real world data and passwords', async () => {
|
|
273
|
+
const text = `Hello world!`;
|
|
274
|
+
const password = 'qweqwebebe1';
|
|
275
|
+
const encryptedContent = await encrypt({
|
|
276
|
+
content: text,
|
|
277
|
+
type: 'gpgPassword',
|
|
278
|
+
password,
|
|
279
|
+
});
|
|
280
|
+
const armoredContent = armor(encryptedContent);
|
|
281
|
+
const decryptedMessage = await decrypt({
|
|
282
|
+
content: armoredContent,
|
|
283
|
+
type: 'gpgPassword',
|
|
284
|
+
password,
|
|
285
|
+
});
|
|
286
|
+
expect(decryptedMessage).toEqual('Hello world!');
|
|
287
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|