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/db.js ADDED
@@ -0,0 +1,284 @@
1
+ import Database from 'better-sqlite3';
2
+ import { readFileSync, existsSync, mkdirSync, copyFileSync } from 'fs';
3
+ import { join, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { getConfigDir, getDbPath } from './config.js';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ // New location: ~/.lpgp/data.db
9
+ const DB_DIR = getConfigDir();
10
+ const DB_PATH = getDbPath();
11
+ // Schema is bundled with the package
12
+ const SCHEMA_PATH = join(__dirname, 'schema.sql');
13
+ // Legacy locations (for migration)
14
+ const LEGACY_DB_DIR = join(__dirname, '..', 'db');
15
+ const LEGACY_DB_PATH = join(LEGACY_DB_DIR, 'data.db');
16
+ const LEGACY_JSON_PATH = join(LEGACY_DB_DIR, 'data.json');
17
+ // SQLite stores booleans as 0/1, so we need conversion helpers
18
+ function boolToInt(value) {
19
+ return value ? 1 : 0;
20
+ }
21
+ function intToBool(value) {
22
+ return value === 1;
23
+ }
24
+ export class Db {
25
+ db;
26
+ constructor() {
27
+ // Ensure config directory exists (handled by getConfigDir, but be explicit)
28
+ if (!existsSync(DB_DIR)) {
29
+ mkdirSync(DB_DIR, { recursive: true });
30
+ }
31
+ // Migrate from legacy location if needed
32
+ this.migrateFromLegacyLocation();
33
+ // Initialize database
34
+ this.db = new Database(DB_PATH);
35
+ this.db.pragma('journal_mode = WAL'); // Better performance for concurrent reads
36
+ // Initialize schema
37
+ this.initializeSchema();
38
+ // Migrate old JSON data if it exists (from legacy location)
39
+ this.migrateFromJson();
40
+ }
41
+ /**
42
+ * Migrate database from the old project-local location to ~/.lpgp
43
+ */
44
+ migrateFromLegacyLocation() {
45
+ // If new db already exists, nothing to migrate
46
+ if (existsSync(DB_PATH)) {
47
+ return;
48
+ }
49
+ // Check if there's a database in the legacy location
50
+ if (existsSync(LEGACY_DB_PATH)) {
51
+ try {
52
+ // Copy the old database to the new location
53
+ copyFileSync(LEGACY_DB_PATH, DB_PATH);
54
+ // Also copy WAL and SHM files if they exist
55
+ const walPath = LEGACY_DB_PATH + '-wal';
56
+ const shmPath = LEGACY_DB_PATH + '-shm';
57
+ if (existsSync(walPath)) {
58
+ copyFileSync(walPath, DB_PATH + '-wal');
59
+ }
60
+ if (existsSync(shmPath)) {
61
+ copyFileSync(shmPath, DB_PATH + '-shm');
62
+ }
63
+ console.log(`Migrated database from ${LEGACY_DB_PATH} to ${DB_PATH}`);
64
+ }
65
+ catch (error) {
66
+ console.error('Failed to migrate database from legacy location:', error);
67
+ }
68
+ }
69
+ }
70
+ initializeSchema() {
71
+ const schema = readFileSync(SCHEMA_PATH, 'utf-8');
72
+ this.db.exec(schema);
73
+ }
74
+ migrateFromJson() {
75
+ if (!existsSync(LEGACY_JSON_PATH)) {
76
+ return;
77
+ }
78
+ try {
79
+ const fileContent = readFileSync(LEGACY_JSON_PATH, 'utf-8').trim();
80
+ if (fileContent === '') {
81
+ return;
82
+ }
83
+ const oldData = JSON.parse(fileContent);
84
+ // Migrate keypairs (with default values for new fields)
85
+ for (const kp of oldData.keypair) {
86
+ const existing = this.db
87
+ .prepare('SELECT id FROM keypair WHERE fingerprint = ?')
88
+ .get(kp.fingerprint);
89
+ if (!existing) {
90
+ this.db
91
+ .prepare(`INSERT INTO keypair (
92
+ name, email, fingerprint, public_key, private_key, passphrase_protected,
93
+ algorithm, key_size, can_sign, can_encrypt, can_certify, can_authenticate,
94
+ expires_at, revoked, revocation_reason, created_at, updated_at, last_used_at, is_default
95
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
96
+ .run(kp.name, kp.email, kp.fingerprint, kp.public_key, kp.private_key, boolToInt(kp.passphrase_protected), 'RSA', // Default algorithm
97
+ '4096', // Default key size
98
+ 1, // can_sign
99
+ 1, // can_encrypt
100
+ 0, // can_certify
101
+ 0, // can_authenticate
102
+ null, // expires_at
103
+ 0, // revoked
104
+ null, // revocation_reason
105
+ kp.created_at, kp.updated_at, null, // last_used_at
106
+ boolToInt(kp.is_default));
107
+ }
108
+ }
109
+ // Migrate contacts (with default values for new fields)
110
+ for (const contact of oldData.contact) {
111
+ const existing = this.db
112
+ .prepare('SELECT id FROM contact WHERE fingerprint = ?')
113
+ .get(contact.fingerprint);
114
+ if (!existing) {
115
+ this.db
116
+ .prepare(`INSERT INTO contact (
117
+ name, email, fingerprint, public_key, algorithm, key_size,
118
+ trusted, last_verified_at, notes, expires_at, revoked, created_at, updated_at
119
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
120
+ .run(contact.name, contact.email, contact.fingerprint, contact.public_key, 'RSA', // Default algorithm
121
+ '4096', // Default key size
122
+ boolToInt(contact.trusted), null, // last_verified_at
123
+ contact.notes || null, null, // expires_at
124
+ 0, // revoked
125
+ contact.created_at, contact.updated_at);
126
+ }
127
+ }
128
+ console.log('Successfully migrated data from JSON to SQLite');
129
+ }
130
+ catch (error) {
131
+ console.error('Failed to migrate JSON data:', error);
132
+ }
133
+ }
134
+ select({ table, where, }) {
135
+ if (table === 'settings') {
136
+ const row = this.db.prepare('SELECT * FROM settings WHERE id = 1').get();
137
+ if (!row) {
138
+ throw new Error('Settings not found');
139
+ }
140
+ // Convert SQLite integers to booleans
141
+ return {
142
+ ...row,
143
+ auto_sign_messages: intToBool(row.auto_sign_messages),
144
+ prefer_inline_pgp: intToBool(row.prefer_inline_pgp),
145
+ };
146
+ }
147
+ let sql = `SELECT * FROM ${table}`;
148
+ let params = [];
149
+ if (where) {
150
+ const operator = where.compare === 'is'
151
+ ? '='
152
+ : where.compare === 'is not'
153
+ ? '!='
154
+ : where.compare === 'like'
155
+ ? 'LIKE'
156
+ : 'NOT LIKE';
157
+ sql += ` WHERE ${String(where.key)} ${operator} ?`;
158
+ params.push(where.compare === 'like' || where.compare === 'not like'
159
+ ? `%${where.value}%`
160
+ : where.value);
161
+ }
162
+ const rows = this.db.prepare(sql).all(...params);
163
+ // Convert SQLite integers to booleans for keypair and contact
164
+ return rows.map((row) => {
165
+ if (table === 'keypair') {
166
+ return {
167
+ ...row,
168
+ passphrase_protected: intToBool(row.passphrase_protected),
169
+ can_sign: intToBool(row.can_sign),
170
+ can_encrypt: intToBool(row.can_encrypt),
171
+ can_certify: intToBool(row.can_certify),
172
+ can_authenticate: intToBool(row.can_authenticate),
173
+ revoked: intToBool(row.revoked),
174
+ is_default: intToBool(row.is_default),
175
+ };
176
+ }
177
+ else if (table === 'contact') {
178
+ return {
179
+ ...row,
180
+ trusted: intToBool(row.trusted),
181
+ revoked: intToBool(row.revoked),
182
+ };
183
+ }
184
+ return row;
185
+ });
186
+ }
187
+ insert(table, value) {
188
+ if (table === 'settings') {
189
+ // Settings is a single row, use UPDATE instead
190
+ const updates = value;
191
+ const setPairs = [];
192
+ const params = [];
193
+ for (const [key, val] of Object.entries(updates)) {
194
+ setPairs.push(`${key} = ?`);
195
+ if (typeof val === 'boolean') {
196
+ params.push(boolToInt(val));
197
+ }
198
+ else {
199
+ params.push(val);
200
+ }
201
+ }
202
+ this.db.prepare(`UPDATE settings SET ${setPairs.join(', ')} WHERE id = 1`).run(...params);
203
+ return this.select({ table: 'settings' });
204
+ }
205
+ const now = new Date().toISOString();
206
+ const record = { ...value, created_at: now, updated_at: now };
207
+ // Convert booleans to integers for SQLite
208
+ if (table === 'keypair') {
209
+ record.passphrase_protected = boolToInt(record.passphrase_protected);
210
+ record.can_sign = boolToInt(record.can_sign ?? true);
211
+ record.can_encrypt = boolToInt(record.can_encrypt ?? true);
212
+ record.can_certify = boolToInt(record.can_certify ?? false);
213
+ record.can_authenticate = boolToInt(record.can_authenticate ?? false);
214
+ record.revoked = boolToInt(record.revoked ?? false);
215
+ record.is_default = boolToInt(record.is_default ?? false);
216
+ }
217
+ else if (table === 'contact') {
218
+ record.trusted = boolToInt(record.trusted ?? false);
219
+ record.revoked = boolToInt(record.revoked ?? false);
220
+ }
221
+ const keys = Object.keys(record);
222
+ const placeholders = keys.map(() => '?').join(', ');
223
+ const values = keys.map((k) => record[k]);
224
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders})`;
225
+ const info = this.db.prepare(sql).run(...values);
226
+ // Fetch and return the inserted record
227
+ return this.db.prepare(`SELECT * FROM ${table} WHERE id = ?`).get(info.lastInsertRowid);
228
+ }
229
+ update(table, where, updates) {
230
+ const now = new Date().toISOString();
231
+ const record = { ...updates, updated_at: now };
232
+ // Convert booleans to integers for SQLite
233
+ if (table === 'keypair' && record) {
234
+ if ('passphrase_protected' in record)
235
+ record.passphrase_protected = boolToInt(record.passphrase_protected);
236
+ if ('can_sign' in record)
237
+ record.can_sign = boolToInt(record.can_sign);
238
+ if ('can_encrypt' in record)
239
+ record.can_encrypt = boolToInt(record.can_encrypt);
240
+ if ('can_certify' in record)
241
+ record.can_certify = boolToInt(record.can_certify);
242
+ if ('can_authenticate' in record)
243
+ record.can_authenticate = boolToInt(record.can_authenticate);
244
+ if ('revoked' in record)
245
+ record.revoked = boolToInt(record.revoked);
246
+ if ('is_default' in record)
247
+ record.is_default = boolToInt(record.is_default);
248
+ }
249
+ else if (table === 'contact' && record) {
250
+ if ('trusted' in record)
251
+ record.trusted = boolToInt(record.trusted);
252
+ if ('revoked' in record)
253
+ record.revoked = boolToInt(record.revoked);
254
+ }
255
+ else if (table === 'settings' && record) {
256
+ if ('auto_sign_messages' in record)
257
+ record.auto_sign_messages = boolToInt(record.auto_sign_messages);
258
+ if ('prefer_inline_pgp' in record)
259
+ record.prefer_inline_pgp = boolToInt(record.prefer_inline_pgp);
260
+ }
261
+ const setPairs = [];
262
+ const params = [];
263
+ for (const [key, val] of Object.entries(record)) {
264
+ if (key === 'id')
265
+ continue; // Don't update id
266
+ setPairs.push(`${key} = ?`);
267
+ params.push(val);
268
+ }
269
+ params.push(where.value);
270
+ const sql = `UPDATE ${table} SET ${setPairs.join(', ')} WHERE ${String(where.key)} = ?`;
271
+ this.db.prepare(sql).run(...params);
272
+ }
273
+ delete(table, where) {
274
+ if (table === 'settings') {
275
+ throw new Error('Cannot delete settings row');
276
+ }
277
+ const sql = `DELETE FROM ${table} WHERE ${String(where.key)} = ?`;
278
+ this.db.prepare(sql).run(where.value);
279
+ }
280
+ close() {
281
+ this.db.close();
282
+ }
283
+ }
284
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function decryptMessage(encryptedMessage: string, privateKeyArmored: string, passphrase: string): Promise<string>;
2
+ //# sourceMappingURL=decrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../src/decrypt.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -0,0 +1,25 @@
1
+ import * as openpgp from 'openpgp';
2
+ // Config to allow weak keys like DSA (not recommended for production)
3
+ const weakKeyConfig = {
4
+ rejectPublicKeyAlgorithms: new Set(),
5
+ rejectHashAlgorithms: new Set(),
6
+ rejectMessageHashAlgorithms: new Set(),
7
+ rejectCurves: new Set(),
8
+ };
9
+ export async function decryptMessage(encryptedMessage, privateKeyArmored, passphrase) {
10
+ const privateKey = await openpgp.decryptKey({
11
+ privateKey: await openpgp.readPrivateKey({ armoredKey: privateKeyArmored, config: weakKeyConfig }),
12
+ passphrase,
13
+ config: weakKeyConfig,
14
+ });
15
+ const message = await openpgp.readMessage({
16
+ armoredMessage: encryptedMessage,
17
+ });
18
+ const { data: decrypted } = await openpgp.decrypt({
19
+ message,
20
+ decryptionKeys: privateKey,
21
+ config: weakKeyConfig,
22
+ });
23
+ return decrypted;
24
+ }
25
+ //# sourceMappingURL=decrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../src/decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,sEAAsE;AACtE,MAAM,aAAa,GAAG;IACpB,yBAAyB,EAAE,IAAI,GAAG,EAAE;IACpC,oBAAoB,EAAE,IAAI,GAAG,EAAE;IAC/B,2BAA2B,EAAE,IAAI,GAAG,EAAE;IACtC,YAAY,EAAE,IAAI,GAAG,EAAE;CACxB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,gBAAwB,EACxB,iBAAyB,EACzB,UAAkB;IAElB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QAC1C,UAAU,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAClG,UAAU;QACV,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;QACxC,cAAc,EAAE,gBAAgB;KACjC,CAAC,CAAA;IAEF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QAChD,OAAO;QACP,cAAc,EAAE,UAAU;QAC1B,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,OAAO,SAAmB,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function encryptMessage(message: string, publicKeyArmored: string): Promise<string>;
2
+ //# sourceMappingURL=encrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU/F"}
@@ -0,0 +1,18 @@
1
+ import * as openpgp from 'openpgp';
2
+ // Config to allow weak keys like DSA (not recommended for production)
3
+ const weakKeyConfig = {
4
+ rejectPublicKeyAlgorithms: new Set(),
5
+ rejectHashAlgorithms: new Set(),
6
+ rejectMessageHashAlgorithms: new Set(),
7
+ rejectCurves: new Set(),
8
+ };
9
+ export async function encryptMessage(message, publicKeyArmored) {
10
+ const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored, config: weakKeyConfig });
11
+ const encrypted = await openpgp.encrypt({
12
+ message: await openpgp.createMessage({ text: message }),
13
+ encryptionKeys: publicKey,
14
+ config: weakKeyConfig,
15
+ });
16
+ return encrypted;
17
+ }
18
+ //# sourceMappingURL=encrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,sEAAsE;AACtE,MAAM,aAAa,GAAG;IACpB,yBAAyB,EAAE,IAAI,GAAG,EAAE;IACpC,oBAAoB,EAAE,IAAI,GAAG,EAAE;IAC/B,2BAA2B,EAAE,IAAI,GAAG,EAAE;IACtC,YAAY,EAAE,IAAI,GAAG,EAAE;CACxB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,gBAAwB;IAC5E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAEhG,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvD,cAAc,EAAE,SAAS;QACzB,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,OAAO,SAAmB,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { Db, type Keypair } from './db.js';
2
+ export declare class KeyManager {
3
+ private db;
4
+ constructor(db: Db);
5
+ /**
6
+ * Check if there's a default keypair configured
7
+ */
8
+ hasDefaultKeypair(): boolean;
9
+ /**
10
+ * Get the default keypair
11
+ */
12
+ getDefaultKeypair(): Keypair | null;
13
+ /**
14
+ * Prompt user to set up their first keypair
15
+ */
16
+ setupFirstKeypair(): Promise<void>;
17
+ /**
18
+ * Import a keypair (public + private keys)
19
+ */
20
+ importKeypair(setAsDefault?: boolean): Promise<void>;
21
+ /**
22
+ * Generate a new PGP keypair
23
+ */
24
+ generateKeypair(setAsDefault?: boolean): Promise<void>;
25
+ /**
26
+ * Import a keypair from system GPG
27
+ */
28
+ importFromSystemGpg(): Promise<void>;
29
+ /**
30
+ * List all keypairs
31
+ */
32
+ listKeypairs(): void;
33
+ /**
34
+ * Show key management menu
35
+ */
36
+ showKeyManagementMenu(): Promise<'back' | 'main-menu' | void>;
37
+ /**
38
+ * View and manage individual keys
39
+ */
40
+ private viewAndManageKeys;
41
+ /**
42
+ * Manage an individual key
43
+ */
44
+ private manageIndividualKey;
45
+ /**
46
+ * Copy public key to clipboard
47
+ */
48
+ private copyPublicKey;
49
+ /**
50
+ * Export keypair to files
51
+ */
52
+ private exportKeypair;
53
+ /**
54
+ * Rename a keypair
55
+ */
56
+ private renameKeypair;
57
+ /**
58
+ * Set a keypair as default by ID
59
+ */
60
+ private setDefaultKeypairById;
61
+ /**
62
+ * Clear stored passphrase from system keychain
63
+ */
64
+ private clearStoredPassphrase;
65
+ /**
66
+ * Delete a keypair by ID
67
+ */
68
+ private deleteKeypairById;
69
+ /**
70
+ * Set a keypair as default
71
+ */
72
+ private setDefaultKeypair;
73
+ /**
74
+ * Delete a keypair
75
+ */
76
+ private deleteKeypair;
77
+ /**
78
+ * Read multiline input from stdin
79
+ */
80
+ private readMultilineInput;
81
+ /**
82
+ * Read PGP key input with smart detection
83
+ * Allows finishing with Enter when a complete key is detected, or Ctrl+D
84
+ */
85
+ private readKeyInput;
86
+ /**
87
+ * View and manage contacts
88
+ */
89
+ private viewAndManageContacts;
90
+ /**
91
+ * Manage an individual contact
92
+ */
93
+ private manageIndividualContact;
94
+ /**
95
+ * Copy contact's public key to clipboard
96
+ */
97
+ private copyContactPublicKey;
98
+ /**
99
+ * View contact's public key
100
+ */
101
+ private viewContactPublicKey;
102
+ /**
103
+ * Rename a contact
104
+ */
105
+ private renameContact;
106
+ /**
107
+ * Edit contact notes
108
+ */
109
+ private editContactNotes;
110
+ /**
111
+ * Toggle contact trust status
112
+ */
113
+ private toggleContactTrust;
114
+ /**
115
+ * Delete a contact
116
+ */
117
+ private deleteContact;
118
+ }
119
+ //# sourceMappingURL=key-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,KAAK,OAAO,EAAgB,MAAM,SAAS,CAAA;AAuCxD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAI;gBAEF,EAAE,EAAE,EAAE;IAIlB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAQ5B;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAQnC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CxC;;OAEG;IACG,aAAa,CAAC,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA0NjE;;OAEG;IACG,eAAe,CAAC,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAwHnE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqK1C;;OAEG;IACH,YAAY,IAAI,IAAI;IAqBpB;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IA+CnE;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;YACW,mBAAmB;IAiFjC;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,aAAa;IAoE3B;;OAEG;YACW,aAAa;IAiB3B;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,iBAAiB;IAoB/B;;OAEG;YACW,iBAAiB;IAmC/B;;OAEG;YACW,aAAa;IAuC3B;;OAEG;YACW,kBAAkB;IAmBhC;;;OAGG;YACW,YAAY;IA4B1B;;OAEG;YACW,qBAAqB;IA2CnC;;OAEG;YACW,uBAAuB;IA+ErC;;OAEG;YACW,oBAAoB;IAsBlC;;OAEG;YACW,oBAAoB;IAmBlC;;OAEG;YACW,aAAa;IAiB3B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;YACW,aAAa;CAmB5B"}