lpgp 0.2.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 (48) hide show
  1. package/LICENSE +52 -0
  2. package/README.md +218 -0
  3. package/dist/config.d.ts +17 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +31 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db.d.ts +80 -0
  8. package/dist/db.d.ts.map +1 -0
  9. package/dist/db.js +284 -0
  10. package/dist/db.js.map +1 -0
  11. package/dist/decrypt.d.ts +2 -0
  12. package/dist/decrypt.d.ts.map +1 -0
  13. package/dist/decrypt.js +25 -0
  14. package/dist/decrypt.js.map +1 -0
  15. package/dist/encrypt.d.ts +2 -0
  16. package/dist/encrypt.d.ts.map +1 -0
  17. package/dist/encrypt.js +18 -0
  18. package/dist/encrypt.js.map +1 -0
  19. package/dist/key-manager.d.ts +119 -0
  20. package/dist/key-manager.d.ts.map +1 -0
  21. package/dist/key-manager.js +1235 -0
  22. package/dist/key-manager.js.map +1 -0
  23. package/dist/key-utils.d.ts +47 -0
  24. package/dist/key-utils.d.ts.map +1 -0
  25. package/dist/key-utils.js +199 -0
  26. package/dist/key-utils.js.map +1 -0
  27. package/dist/keychain.d.ts +22 -0
  28. package/dist/keychain.d.ts.map +1 -0
  29. package/dist/keychain.js +73 -0
  30. package/dist/keychain.js.map +1 -0
  31. package/dist/pgp-tool.d.ts +3 -0
  32. package/dist/pgp-tool.d.ts.map +1 -0
  33. package/dist/pgp-tool.js +1061 -0
  34. package/dist/pgp-tool.js.map +1 -0
  35. package/dist/prompts.d.ts +11 -0
  36. package/dist/prompts.d.ts.map +1 -0
  37. package/dist/prompts.js +109 -0
  38. package/dist/prompts.js.map +1 -0
  39. package/dist/schema.sql +86 -0
  40. package/dist/system-keys.d.ts +32 -0
  41. package/dist/system-keys.d.ts.map +1 -0
  42. package/dist/system-keys.js +123 -0
  43. package/dist/system-keys.js.map +1 -0
  44. package/dist/ui.d.ts +94 -0
  45. package/dist/ui.d.ts.map +1 -0
  46. package/dist/ui.js +175 -0
  47. package/dist/ui.js.map +1 -0
  48. package/package.json +56 -0
package/dist/ui.js ADDED
@@ -0,0 +1,175 @@
1
+ /**
2
+ * UI Constants and Helpers
3
+ * Provides consistent styling across the CLI application
4
+ */
5
+ import chalk from 'chalk';
6
+ // ============================================================================
7
+ // Color Palette
8
+ // ============================================================================
9
+ export const colors = {
10
+ // Primary brand color for banners and headings
11
+ primary: chalk.cyan,
12
+ primaryBold: chalk.cyan.bold,
13
+ // Success states
14
+ success: chalk.green,
15
+ successBold: chalk.green.bold,
16
+ // Warning/prompt states
17
+ warning: chalk.yellow,
18
+ warningBold: chalk.yellow.bold,
19
+ // Error states
20
+ error: chalk.red,
21
+ errorBold: chalk.red.bold,
22
+ // Muted/secondary text
23
+ muted: chalk.gray,
24
+ mutedDim: chalk.dim,
25
+ // Accent colors for special elements
26
+ accent: chalk.magenta,
27
+ accentBold: chalk.magenta.bold,
28
+ info: chalk.blue,
29
+ infoBold: chalk.blue.bold,
30
+ };
31
+ // ============================================================================
32
+ // Icons with Colors
33
+ // ============================================================================
34
+ export const icons = {
35
+ // Actions
36
+ encrypt: chalk.cyan('→'),
37
+ decrypt: chalk.cyan('←'),
38
+ add: chalk.green('+'),
39
+ generate: chalk.green('+'),
40
+ import: chalk.green('↓'),
41
+ export: chalk.blue('↑'),
42
+ // Navigation
43
+ back: chalk.gray('←'),
44
+ home: chalk.gray('⌂'),
45
+ exit: chalk.red('×'),
46
+ // Items
47
+ key: chalk.yellow('★'),
48
+ contact: chalk.magenta('◆'),
49
+ clipboard: chalk.blue('▣'),
50
+ editor: chalk.blue('▤'),
51
+ inline: chalk.blue('▢'),
52
+ gpg: chalk.yellow('#'),
53
+ // Status
54
+ success: chalk.green('✓'),
55
+ error: chalk.red('✗'),
56
+ warning: chalk.yellow('!'),
57
+ info: chalk.cyan('ℹ'),
58
+ loading: chalk.blue('⏳'),
59
+ locked: chalk.yellow('◐'),
60
+ unlocked: chalk.green('○'),
61
+ // Selection markers
62
+ default: chalk.green('✓'),
63
+ selected: chalk.cyan('●'),
64
+ unselected: chalk.gray('○'),
65
+ // Misc
66
+ edit: chalk.cyan('~'),
67
+ notes: chalk.gray('>'),
68
+ trust: chalk.yellow('★'),
69
+ copy: chalk.blue('▪'),
70
+ view: chalk.gray('▫'),
71
+ multiple: chalk.magenta('+'),
72
+ loop: chalk.cyan('↻'),
73
+ };
74
+ // ============================================================================
75
+ // Banner and Headers
76
+ // ============================================================================
77
+ const APP_NAME = 'lpgp';
78
+ const BANNER_WIDTH = 42;
79
+ export function printBanner() {
80
+ console.clear();
81
+ const title = APP_NAME.padStart((BANNER_WIDTH + APP_NAME.length) / 2).padEnd(BANNER_WIDTH);
82
+ console.log();
83
+ console.log(colors.primaryBold('╔' + '═'.repeat(BANNER_WIDTH) + '╗'));
84
+ console.log(colors.primaryBold('║') + colors.primary(title) + colors.primaryBold('║'));
85
+ console.log(colors.primaryBold('╚' + '═'.repeat(BANNER_WIDTH) + '╝'));
86
+ console.log();
87
+ }
88
+ export function printSectionHeader(title) {
89
+ const padded = ` ${title} `.padStart((BANNER_WIDTH + title.length + 2) / 2).padEnd(BANNER_WIDTH);
90
+ console.log();
91
+ console.log(colors.infoBold('┌' + '─'.repeat(BANNER_WIDTH) + '┐'));
92
+ console.log(colors.infoBold('│') + colors.info(padded) + colors.infoBold('│'));
93
+ console.log(colors.infoBold('└' + '─'.repeat(BANNER_WIDTH) + '┘'));
94
+ console.log();
95
+ }
96
+ export function printDivider() {
97
+ console.log(colors.muted('─'.repeat(50)));
98
+ }
99
+ // ============================================================================
100
+ // Status Messages
101
+ // ============================================================================
102
+ export function showSuccess(message) {
103
+ console.log(colors.success(`${icons.success} ${message}`));
104
+ }
105
+ export function showError(message) {
106
+ console.log(colors.error(`${icons.error} ${message}`));
107
+ }
108
+ export function showWarning(message) {
109
+ console.log(colors.warning(`${icons.warning} ${message}`));
110
+ }
111
+ export function showInfo(message) {
112
+ console.log(colors.info(`${icons.info} ${message}`));
113
+ }
114
+ export function showLoading(message) {
115
+ console.log(colors.info(`${icons.loading} ${message}`));
116
+ }
117
+ // ============================================================================
118
+ // Menu Formatting
119
+ // ============================================================================
120
+ /**
121
+ * Format a menu choice with icon and optional description
122
+ */
123
+ export function menuChoice(icon, label, description) {
124
+ if (description) {
125
+ return `${icon} ${label} ${colors.muted(`(${description})`)}`;
126
+ }
127
+ return `${icon} ${label}`;
128
+ }
129
+ /**
130
+ * Standard navigation choices for menus
131
+ */
132
+ export function backChoice(label = 'Back') {
133
+ return { name: `${icons.back} ${label}`, value: 'back' };
134
+ }
135
+ export function mainMenuChoice() {
136
+ return {
137
+ name: `${icons.home} Main menu ${colors.muted('(esc)')}`,
138
+ value: 'main-menu',
139
+ };
140
+ }
141
+ export function exitChoice() {
142
+ return { name: `${icons.exit} Exit`, value: 'exit' };
143
+ }
144
+ export function cancelChoice() {
145
+ return { name: `${icons.back} Cancel`, value: 'cancel' };
146
+ }
147
+ // ============================================================================
148
+ // Content Display
149
+ // ============================================================================
150
+ /**
151
+ * Display content in a bordered box
152
+ */
153
+ export function showContentBox(title, content) {
154
+ console.log(colors.successBold(`${title}\n`));
155
+ printDivider();
156
+ console.log(content);
157
+ printDivider();
158
+ }
159
+ /**
160
+ * Display a key-value pair
161
+ */
162
+ export function showKeyValue(key, value) {
163
+ const displayValue = value === null ? colors.muted('(none)') : String(value);
164
+ console.log(`${colors.muted(key + ':')} ${displayValue}`);
165
+ }
166
+ // ============================================================================
167
+ // Prompt Helpers
168
+ // ============================================================================
169
+ /**
170
+ * Format a prompt message consistently
171
+ */
172
+ export function promptMessage(message) {
173
+ return colors.primary(message);
174
+ }
175
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC,IAAI;IACnB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAE5B,iBAAiB;IACjB,OAAO,EAAE,KAAK,CAAC,KAAK;IACpB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;IAE7B,wBAAwB;IACxB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;IAE9B,eAAe;IACf,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;IAEzB,uBAAuB;IACvB,KAAK,EAAE,KAAK,CAAC,IAAI;IACjB,QAAQ,EAAE,KAAK,CAAC,GAAG;IAEnB,qCAAqC;IACrC,MAAM,EAAE,KAAK,CAAC,OAAO;IACrB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;IAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;CAC1B,CAAA;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,UAAU;IACV,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAEvB,aAAa;IACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAEpB,QAAQ;IACR,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAEtB,SAAS;IACT,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAE1B,oBAAoB;IACpB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAE3B,OAAO;IACP,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;CACtB,CAAA;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,QAAQ,GAAG,MAAM,CAAA;AACvB,MAAM,YAAY,GAAG,EAAE,CAAA;AAEvB,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,KAAK,EAAE,CAAA;IACf,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC1F,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACtF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAChG,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,KAAa,EACb,WAAoB;IAEpB,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAA;IAC/D,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,MAAM;IAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,cAAc,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACxD,KAAK,EAAE,WAAW;KACnB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AAC1D,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,OAAe;IAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAA;IAC7C,YAAY,EAAE,CAAA;IACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,YAAY,EAAE,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,KAAuC;IAC/E,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAA;AAC3D,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "lpgp",
3
+ "version": "0.2.0",
4
+ "description": "Interactive CLI tool for PGP encryption/decryption with SQLite key management",
5
+ "author": "Bob Bass",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "type": "module",
8
+ "bin": {
9
+ "lpgp": "./dist/pgp-tool.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/robertjbass/lpgp.git"
17
+ },
18
+ "homepage": "https://github.com/robertjbass/lpgp#readme",
19
+ "bugs": {
20
+ "url": "https://github.com/robertjbass/lpgp/issues"
21
+ },
22
+ "engines": {
23
+ "node": ">=18"
24
+ },
25
+ "keywords": [
26
+ "pgp",
27
+ "gpg",
28
+ "encryption",
29
+ "decryption",
30
+ "openpgp",
31
+ "cli",
32
+ "security"
33
+ ],
34
+ "scripts": {
35
+ "dev": "tsx src/pgp-tool.ts",
36
+ "build": "tsc && cp src/schema.sql dist/schema.sql",
37
+ "start": "node dist/pgp-tool.js",
38
+ "format": "prettier --write ."
39
+ },
40
+ "dependencies": {
41
+ "better-sqlite3": "^12.4.1",
42
+ "chalk": "^5.6.2",
43
+ "clipboardy": "^5.0.0",
44
+ "cross-keychain": "^1.1.0",
45
+ "inquirer": "^12.10.0",
46
+ "openpgp": "^6.2.2"
47
+ },
48
+ "devDependencies": {
49
+ "@types/better-sqlite3": "^7.6.13",
50
+ "@types/inquirer": "^9.0.9",
51
+ "@types/node": "^24.9.2",
52
+ "prettier": "^3.6.2",
53
+ "tsx": "^4.20.6",
54
+ "typescript": "^5.9.3"
55
+ }
56
+ }