ownkey 0.1.1 → 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 (81) hide show
  1. package/.prettierrc +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +175 -0
  4. package/dist/commands/apply.d.ts +3 -0
  5. package/dist/commands/apply.d.ts.map +1 -0
  6. package/dist/commands/apply.js +26 -0
  7. package/dist/commands/apply.js.map +1 -0
  8. package/dist/commands/config.d.ts +3 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +142 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/scan.d.ts +3 -0
  13. package/dist/commands/scan.d.ts.map +1 -0
  14. package/dist/commands/scan.js +97 -0
  15. package/dist/commands/scan.js.map +1 -0
  16. package/dist/commands/suggest.d.ts +3 -0
  17. package/dist/commands/suggest.d.ts.map +1 -0
  18. package/dist/commands/suggest.js +34 -0
  19. package/dist/commands/suggest.js.map +1 -0
  20. package/dist/config/defaults.d.ts +12 -0
  21. package/dist/config/defaults.d.ts.map +1 -0
  22. package/dist/config/defaults.js +74 -0
  23. package/dist/config/defaults.js.map +1 -0
  24. package/dist/config/keychain.d.ts +14 -0
  25. package/dist/config/keychain.d.ts.map +1 -0
  26. package/dist/config/keychain.js +112 -0
  27. package/dist/config/keychain.js.map +1 -0
  28. package/dist/config/manager.d.ts +21 -0
  29. package/dist/config/manager.d.ts.map +1 -0
  30. package/dist/config/manager.js +144 -0
  31. package/dist/config/manager.js.map +1 -0
  32. package/dist/core/scanner.d.ts +17 -0
  33. package/dist/core/scanner.d.ts.map +1 -0
  34. package/dist/core/scanner.js +150 -0
  35. package/dist/core/scanner.js.map +1 -0
  36. package/dist/db/client.d.ts +15 -0
  37. package/dist/db/client.d.ts.map +1 -0
  38. package/dist/db/client.js +130 -0
  39. package/dist/db/client.js.map +1 -0
  40. package/dist/db/operations.d.ts +14 -0
  41. package/dist/db/operations.d.ts.map +1 -0
  42. package/dist/db/operations.js +175 -0
  43. package/dist/db/operations.js.map +1 -0
  44. package/dist/db/schema.d.ts +683 -0
  45. package/dist/db/schema.d.ts.map +1 -0
  46. package/dist/db/schema.js +107 -0
  47. package/dist/db/schema.js.map +1 -0
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +61 -2
  51. package/dist/index.js.map +1 -0
  52. package/dist/types/index.d.ts +138 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/index.js +37 -0
  55. package/dist/types/index.js.map +1 -0
  56. package/dist/utils/encryption.d.ts +6 -0
  57. package/dist/utils/encryption.d.ts.map +1 -0
  58. package/dist/utils/encryption.js +39 -0
  59. package/dist/utils/encryption.js.map +1 -0
  60. package/dist/utils/logger.d.ts +25 -0
  61. package/dist/utils/logger.d.ts.map +1 -0
  62. package/dist/utils/logger.js +97 -0
  63. package/dist/utils/logger.js.map +1 -0
  64. package/package.json +56 -29
  65. package/src/commands/apply.ts +27 -0
  66. package/src/commands/config.ts +154 -0
  67. package/src/commands/scan.ts +114 -0
  68. package/src/commands/suggest.ts +37 -0
  69. package/src/config/defaults.ts +80 -0
  70. package/src/config/keychain.ts +125 -0
  71. package/src/config/manager.ts +166 -0
  72. package/src/core/scanner.ts +174 -0
  73. package/src/db/client.ts +151 -0
  74. package/src/db/migrations/001_init.sql +80 -0
  75. package/src/db/operations.ts +217 -0
  76. package/src/db/schema.ts +118 -0
  77. package/src/index.ts +74 -0
  78. package/src/types/index.ts +198 -0
  79. package/src/utils/encryption.ts +54 -0
  80. package/src/utils/logger.ts +111 -0
  81. package/tsconfig.json +33 -0
@@ -0,0 +1,111 @@
1
+ import chalk from 'chalk';
2
+ import { LogLevel } from '../types/index.js';
3
+ import { mkdir, appendFile } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { homedir } from 'os';
6
+ import { existsSync } from 'fs';
7
+
8
+ class Logger {
9
+ private level: LogLevel = 'normal';
10
+ private logDir: string;
11
+ private logFile: string;
12
+
13
+ constructor() {
14
+ this.logDir = join(homedir(), '.ownkey', 'logs');
15
+ const date = new Date().toISOString().split('T')[0];
16
+ this.logFile = join(this.logDir, `ownkey-${date}.log`);
17
+ }
18
+
19
+ async init(): Promise<void> {
20
+ if (!existsSync(this.logDir)) {
21
+ await mkdir(this.logDir, { recursive: true });
22
+ }
23
+ }
24
+
25
+ setLevel(level: LogLevel): void {
26
+ this.level = level;
27
+ }
28
+
29
+ getLevel(): LogLevel {
30
+ return this.level;
31
+ }
32
+
33
+ private shouldLog(messageLevel: LogLevel): boolean {
34
+ const levels: LogLevel[] = ['quiet', 'normal', 'verbose', 'debug'];
35
+ const currentIndex = levels.indexOf(this.level);
36
+ const messageIndex = levels.indexOf(messageLevel);
37
+ return messageIndex <= currentIndex;
38
+ }
39
+
40
+ private async writeToFile(message: string, level: string): Promise<void> {
41
+ try {
42
+ const timestamp = new Date().toISOString();
43
+ const logEntry = JSON.stringify({ timestamp, level, message }) + '\n';
44
+ await appendFile(this.logFile, logEntry);
45
+ } catch (error) {
46
+ // Silently fail if we can't write to log file
47
+ }
48
+ }
49
+
50
+ info(message: string): void {
51
+ if (this.shouldLog('normal')) {
52
+ console.log(chalk.blue('ℹ'), message);
53
+ }
54
+ this.writeToFile(message, 'info');
55
+ }
56
+
57
+ success(message: string): void {
58
+ if (this.shouldLog('normal')) {
59
+ console.log(chalk.green('✓'), message);
60
+ }
61
+ this.writeToFile(message, 'success');
62
+ }
63
+
64
+ warn(message: string): void {
65
+ if (this.shouldLog('normal')) {
66
+ console.log(chalk.yellow('⚠'), message);
67
+ }
68
+ this.writeToFile(message, 'warn');
69
+ }
70
+
71
+ error(message: string, error?: Error): void {
72
+ if (this.shouldLog('quiet')) {
73
+ console.error(chalk.red('✗'), message);
74
+ if (error && this.level === 'debug') {
75
+ console.error(chalk.gray(error.stack || error.message));
76
+ }
77
+ }
78
+ this.writeToFile(`${message} ${error?.message || ''}`, 'error');
79
+ }
80
+
81
+ verbose(message: string): void {
82
+ if (this.shouldLog('verbose')) {
83
+ console.log(chalk.gray('→'), message);
84
+ }
85
+ this.writeToFile(message, 'verbose');
86
+ }
87
+
88
+ debug(message: string, data?: any): void {
89
+ if (this.shouldLog('debug')) {
90
+ console.log(chalk.magenta('🐛'), message);
91
+ if (data) {
92
+ console.log(chalk.gray(JSON.stringify(data, null, 2)));
93
+ }
94
+ }
95
+ this.writeToFile(`${message} ${data ? JSON.stringify(data) : ''}`, 'debug');
96
+ }
97
+
98
+ spinner(message: string): { succeed: (msg: string) => void; fail: (msg: string) => void } {
99
+ // Simple spinner replacement for ora
100
+ if (this.shouldLog('normal')) {
101
+ console.log(chalk.cyan('⏳'), message);
102
+ }
103
+ return {
104
+ succeed: (msg: string) => this.success(msg),
105
+ fail: (msg: string) => this.error(msg),
106
+ };
107
+ }
108
+ }
109
+
110
+ // Singleton instance
111
+ export const logger = new Logger();
package/tsconfig.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "lib": [
6
+ "ES2022"
7
+ ],
8
+ "moduleResolution": "bundler",
9
+ "rootDir": "./src",
10
+ "outDir": "./dist",
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "sourceMap": true,
14
+ "strict": true,
15
+ "esModuleInterop": true,
16
+ "skipLibCheck": true,
17
+ "forceConsistentCasingInFileNames": true,
18
+ "resolveJsonModule": true,
19
+ "allowSyntheticDefaultImports": true,
20
+ "noUnusedLocals": true,
21
+ "noUnusedParameters": true,
22
+ "noImplicitReturns": true,
23
+ "noFallthroughCasesInSwitch": true
24
+ },
25
+ "include": [
26
+ "src/**/*"
27
+ ],
28
+ "exclude": [
29
+ "node_modules",
30
+ "dist",
31
+ "tests"
32
+ ]
33
+ }