@ebowwa/crm 0.1.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 (187) hide show
  1. package/README.md +174 -0
  2. package/dist/cli/commands/activities.d.ts +11 -0
  3. package/dist/cli/commands/activities.d.ts.map +1 -0
  4. package/dist/cli/commands/activities.js +427 -0
  5. package/dist/cli/commands/activities.js.map +1 -0
  6. package/dist/cli/commands/contacts.d.ts +11 -0
  7. package/dist/cli/commands/contacts.d.ts.map +1 -0
  8. package/dist/cli/commands/contacts.js +458 -0
  9. package/dist/cli/commands/contacts.js.map +1 -0
  10. package/dist/cli/commands/deals.d.ts +11 -0
  11. package/dist/cli/commands/deals.d.ts.map +1 -0
  12. package/dist/cli/commands/deals.js +498 -0
  13. package/dist/cli/commands/deals.js.map +1 -0
  14. package/dist/cli/commands/media.d.ts +11 -0
  15. package/dist/cli/commands/media.d.ts.map +1 -0
  16. package/dist/cli/commands/media.js +417 -0
  17. package/dist/cli/commands/media.js.map +1 -0
  18. package/dist/cli/commands/search.d.ts +11 -0
  19. package/dist/cli/commands/search.d.ts.map +1 -0
  20. package/dist/cli/commands/search.js +346 -0
  21. package/dist/cli/commands/search.js.map +1 -0
  22. package/dist/cli/index.d.ts +13 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +173 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/cli/repl.d.ts +15 -0
  27. package/dist/cli/repl.d.ts.map +1 -0
  28. package/dist/cli/repl.js +318 -0
  29. package/dist/cli/repl.js.map +1 -0
  30. package/dist/cli/utils/config.d.ts +91 -0
  31. package/dist/cli/utils/config.d.ts.map +1 -0
  32. package/dist/cli/utils/config.js +212 -0
  33. package/dist/cli/utils/config.js.map +1 -0
  34. package/dist/cli/utils/output.d.ts +136 -0
  35. package/dist/cli/utils/output.d.ts.map +1 -0
  36. package/dist/cli/utils/output.js +323 -0
  37. package/dist/cli/utils/output.js.map +1 -0
  38. package/dist/cli/utils/prompt.d.ts +81 -0
  39. package/dist/cli/utils/prompt.d.ts.map +1 -0
  40. package/dist/cli/utils/prompt.js +341 -0
  41. package/dist/cli/utils/prompt.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +8 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/core/index.d.ts +6 -0
  47. package/dist/core/index.d.ts.map +1 -0
  48. package/dist/core/index.js +32 -0
  49. package/dist/core/index.js.map +1 -0
  50. package/dist/core/schemas.d.ts +3050 -0
  51. package/dist/core/schemas.d.ts.map +1 -0
  52. package/dist/core/schemas.js +667 -0
  53. package/dist/core/schemas.js.map +1 -0
  54. package/dist/core/types.d.ts +597 -0
  55. package/dist/core/types.d.ts.map +1 -0
  56. package/dist/core/types.js +8 -0
  57. package/dist/core/types.js.map +1 -0
  58. package/dist/index.d.ts +7 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +8 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/mcp/index.d.ts +14 -0
  63. package/dist/mcp/index.d.ts.map +1 -0
  64. package/dist/mcp/index.js +11 -0
  65. package/dist/mcp/index.js.map +1 -0
  66. package/dist/mcp/server.d.ts +13 -0
  67. package/dist/mcp/server.d.ts.map +1 -0
  68. package/dist/mcp/server.js +18 -0
  69. package/dist/mcp/server.js.map +1 -0
  70. package/dist/mcp/storage/client.d.ts +109 -0
  71. package/dist/mcp/storage/client.d.ts.map +1 -0
  72. package/dist/mcp/storage/client.js +355 -0
  73. package/dist/mcp/storage/client.js.map +1 -0
  74. package/dist/mcp/storage/index.d.ts +7 -0
  75. package/dist/mcp/storage/index.d.ts.map +1 -0
  76. package/dist/mcp/storage/index.js +6 -0
  77. package/dist/mcp/storage/index.js.map +1 -0
  78. package/dist/mcp/storage/types.d.ts +44 -0
  79. package/dist/mcp/storage/types.d.ts.map +1 -0
  80. package/dist/mcp/storage/types.js +35 -0
  81. package/dist/mcp/storage/types.js.map +1 -0
  82. package/dist/mcp/tools/definitions.d.ts +16 -0
  83. package/dist/mcp/tools/definitions.d.ts.map +1 -0
  84. package/dist/mcp/tools/definitions.js +914 -0
  85. package/dist/mcp/tools/definitions.js.map +1 -0
  86. package/dist/mcp/tools/handlers.d.ts +50 -0
  87. package/dist/mcp/tools/handlers.d.ts.map +1 -0
  88. package/dist/mcp/tools/handlers.js +760 -0
  89. package/dist/mcp/tools/handlers.js.map +1 -0
  90. package/dist/mcp/tools/index.d.ts +7 -0
  91. package/dist/mcp/tools/index.d.ts.map +1 -0
  92. package/dist/mcp/tools/index.js +6 -0
  93. package/dist/mcp/tools/index.js.map +1 -0
  94. package/dist/mcp/tools/types.d.ts +314 -0
  95. package/dist/mcp/tools/types.d.ts.map +1 -0
  96. package/dist/mcp/tools/types.js +5 -0
  97. package/dist/mcp/tools/types.js.map +1 -0
  98. package/dist/mcp/transports/stdio.d.ts +27 -0
  99. package/dist/mcp/transports/stdio.d.ts.map +1 -0
  100. package/dist/mcp/transports/stdio.js +237 -0
  101. package/dist/mcp/transports/stdio.js.map +1 -0
  102. package/dist/telemetry/index.d.ts +58 -0
  103. package/dist/telemetry/index.d.ts.map +1 -0
  104. package/dist/telemetry/index.js +109 -0
  105. package/dist/telemetry/index.js.map +1 -0
  106. package/dist/telemetry/logger.d.ts +116 -0
  107. package/dist/telemetry/logger.d.ts.map +1 -0
  108. package/dist/telemetry/logger.js +256 -0
  109. package/dist/telemetry/logger.js.map +1 -0
  110. package/dist/telemetry/metrics.d.ts +115 -0
  111. package/dist/telemetry/metrics.d.ts.map +1 -0
  112. package/dist/telemetry/metrics.js +292 -0
  113. package/dist/telemetry/metrics.js.map +1 -0
  114. package/dist/telemetry/tracer.d.ts +227 -0
  115. package/dist/telemetry/tracer.d.ts.map +1 -0
  116. package/dist/telemetry/tracer.js +355 -0
  117. package/dist/telemetry/tracer.js.map +1 -0
  118. package/dist/web/app.d.ts +2 -0
  119. package/dist/web/app.d.ts.map +1 -0
  120. package/dist/web/app.js +115 -0
  121. package/dist/web/app.js.map +1 -0
  122. package/dist/web/components/ContactList.d.ts +3 -0
  123. package/dist/web/components/ContactList.d.ts.map +1 -0
  124. package/dist/web/components/ContactList.js +262 -0
  125. package/dist/web/components/ContactList.js.map +1 -0
  126. package/dist/web/components/Dashboard.d.ts +3 -0
  127. package/dist/web/components/Dashboard.d.ts.map +1 -0
  128. package/dist/web/components/Dashboard.js +158 -0
  129. package/dist/web/components/Dashboard.js.map +1 -0
  130. package/dist/web/components/DealPipeline.d.ts +3 -0
  131. package/dist/web/components/DealPipeline.d.ts.map +1 -0
  132. package/dist/web/components/DealPipeline.js +306 -0
  133. package/dist/web/components/DealPipeline.js.map +1 -0
  134. package/dist/web/index.d.ts +2 -0
  135. package/dist/web/index.d.ts.map +1 -0
  136. package/dist/web/index.js +269 -0
  137. package/dist/web/index.js.map +1 -0
  138. package/dist/web/types.d.ts +75 -0
  139. package/dist/web/types.d.ts.map +1 -0
  140. package/dist/web/types.js +3 -0
  141. package/dist/web/types.js.map +1 -0
  142. package/native/index.d.ts +571 -0
  143. package/native/index.js +687 -0
  144. package/package.json +105 -0
  145. package/src/cli/commands/activities.ts +543 -0
  146. package/src/cli/commands/contacts.ts +563 -0
  147. package/src/cli/commands/deals.ts +637 -0
  148. package/src/cli/commands/media.ts +521 -0
  149. package/src/cli/commands/search.ts +426 -0
  150. package/src/cli/index.ts +203 -0
  151. package/src/cli/repl.ts +379 -0
  152. package/src/cli/utils/config.ts +299 -0
  153. package/src/cli/utils/output.ts +386 -0
  154. package/src/cli/utils/prompt.ts +444 -0
  155. package/src/cli.ts +11 -0
  156. package/src/core/index.ts +184 -0
  157. package/src/core/schemas.ts +770 -0
  158. package/src/core/types.ts +969 -0
  159. package/src/index.ts +8 -0
  160. package/src/mcp/index.ts +17 -0
  161. package/src/mcp/server.ts +26 -0
  162. package/src/mcp/storage/client.ts +408 -0
  163. package/src/mcp/storage/index.ts +7 -0
  164. package/src/mcp/storage/types.ts +72 -0
  165. package/src/mcp/tools/definitions.ts +961 -0
  166. package/src/mcp/tools/handlers.ts +805 -0
  167. package/src/mcp/tools/index.ts +7 -0
  168. package/src/mcp/tools/types.ts +390 -0
  169. package/src/mcp/transports/stdio.ts +225 -0
  170. package/src/telemetry/index.ts +131 -0
  171. package/src/telemetry/logger.ts +318 -0
  172. package/src/telemetry/metrics.ts +393 -0
  173. package/src/telemetry/tracer.ts +487 -0
  174. package/src/web/api/activities.ts +41 -0
  175. package/src/web/api/contacts.ts +114 -0
  176. package/src/web/api/deals.ts +108 -0
  177. package/src/web/api/media.ts +98 -0
  178. package/src/web/app.tsx +143 -0
  179. package/src/web/components/ActivityFeed.tsx +195 -0
  180. package/src/web/components/ContactList.tsx +340 -0
  181. package/src/web/components/Dashboard.tsx +214 -0
  182. package/src/web/components/DealPipeline.tsx +405 -0
  183. package/src/web/components/MediaGallery.tsx +334 -0
  184. package/src/web/index.html +14 -0
  185. package/src/web/index.ts +326 -0
  186. package/src/web/styles/main.css +180 -0
  187. package/src/web/types.ts +311 -0
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Interactive REPL Mode
3
+ *
4
+ * Provides an interactive shell for CRM operations.
5
+ */
6
+ import * as readline from 'readline';
7
+ import { printSuccess, printError, printHeader, printDivider, output, colorize, } from './utils/output.js';
8
+ import { displayConfig, getConfigLocation } from './utils/config.js';
9
+ /**
10
+ * REPL history
11
+ */
12
+ const history = [];
13
+ const context = {
14
+ currentContact: null,
15
+ currentDeal: null,
16
+ lastResults: [],
17
+ };
18
+ /**
19
+ * Available commands in REPL
20
+ */
21
+ const REPL_COMMANDS = {
22
+ help: {
23
+ description: 'Show available commands',
24
+ usage: 'help [command]',
25
+ },
26
+ contacts: {
27
+ description: 'Manage contacts',
28
+ usage: 'contacts list|get|create|update|delete [args...]',
29
+ example: 'contacts list --search john',
30
+ },
31
+ deals: {
32
+ description: 'Manage deals',
33
+ usage: 'deals list|get|create|update|delete|move [args...]',
34
+ example: 'deals list --stage proposal',
35
+ },
36
+ activities: {
37
+ description: 'Manage activities',
38
+ usage: 'activities list|log|create|delete [args...]',
39
+ example: 'activities log <contact-id> call "Follow up call"',
40
+ },
41
+ media: {
42
+ description: 'Manage media files',
43
+ usage: 'media list|upload|get|delete [args...]',
44
+ example: 'media upload ./doc.pdf --contact <id>',
45
+ },
46
+ search: {
47
+ description: 'Search across entities',
48
+ usage: 'search <query>',
49
+ example: 'search john smith',
50
+ },
51
+ recent: {
52
+ description: 'Show recent items',
53
+ usage: 'recent [contacts|deals|activities]',
54
+ },
55
+ use: {
56
+ description: 'Set context (current contact/deal)',
57
+ usage: 'use contact|deal <id>',
58
+ example: 'use contact abc-123',
59
+ },
60
+ context: {
61
+ description: 'Show current context',
62
+ usage: 'context',
63
+ },
64
+ clear: {
65
+ description: 'Clear the screen',
66
+ usage: 'clear',
67
+ },
68
+ config: {
69
+ description: 'Show or manage configuration',
70
+ usage: 'config [location]',
71
+ },
72
+ history: {
73
+ description: 'Show command history',
74
+ usage: 'history [n]',
75
+ },
76
+ exit: {
77
+ description: 'Exit REPL',
78
+ usage: 'exit',
79
+ },
80
+ quit: {
81
+ description: 'Exit REPL (alias)',
82
+ usage: 'quit',
83
+ },
84
+ };
85
+ /**
86
+ * Create readline interface
87
+ */
88
+ function createRL() {
89
+ return readline.createInterface({
90
+ input: process.stdin,
91
+ output: process.stdout,
92
+ history: history,
93
+ historySize: 100,
94
+ removeHistoryDuplicates: true,
95
+ });
96
+ }
97
+ /**
98
+ * Get prompt string
99
+ */
100
+ function getPrompt() {
101
+ const parts = [];
102
+ if (context.currentContact) {
103
+ parts.push(output.info(`c:${context.currentContact.slice(0, 4)}`));
104
+ }
105
+ if (context.currentDeal) {
106
+ parts.push(output.info(`d:${context.currentDeal.slice(0, 4)}`));
107
+ }
108
+ const contextStr = parts.length > 0 ? `(${parts.join(',')})` : '';
109
+ return `${contextStr}crm> `;
110
+ }
111
+ /**
112
+ * Show help
113
+ */
114
+ function showHelp(command) {
115
+ if (command && REPL_COMMANDS[command]) {
116
+ const cmd = REPL_COMMANDS[command];
117
+ console.log();
118
+ console.log(output.bold(command));
119
+ console.log(` ${cmd.description}`);
120
+ console.log();
121
+ console.log(` Usage: ${cmd.usage}`);
122
+ if (cmd.example) {
123
+ console.log(` Example: ${cmd.example}`);
124
+ }
125
+ console.log();
126
+ return;
127
+ }
128
+ console.log();
129
+ console.log(output.bold('CRM REPL Commands'));
130
+ printDivider();
131
+ const maxCmd = Math.max(...Object.keys(REPL_COMMANDS).map((c) => c.length));
132
+ for (const [cmd, info] of Object.entries(REPL_COMMANDS)) {
133
+ console.log(` ${colorize(cmd.padEnd(maxCmd + 2), 'cyan')}${info.description}`);
134
+ }
135
+ console.log();
136
+ console.log(`Type ${output.info('help <command>')} for detailed usage.`);
137
+ console.log();
138
+ }
139
+ /**
140
+ * Show context
141
+ */
142
+ function showContext() {
143
+ console.log();
144
+ console.log(output.bold('Current Context'));
145
+ printDivider('-');
146
+ if (context.currentContact) {
147
+ console.log(` Contact: ${context.currentContact}`);
148
+ }
149
+ if (context.currentDeal) {
150
+ console.log(` Deal: ${context.currentDeal}`);
151
+ }
152
+ if (!context.currentContact && !context.currentDeal) {
153
+ console.log(' (no context set)');
154
+ }
155
+ console.log();
156
+ }
157
+ /**
158
+ * Set context
159
+ */
160
+ function setContext(type, id) {
161
+ if (type === 'contact') {
162
+ context.currentContact = id;
163
+ printSuccess(`Context set to contact: ${id}`);
164
+ }
165
+ else if (type === 'deal') {
166
+ context.currentDeal = id;
167
+ printSuccess(`Context set to deal: ${id}`);
168
+ }
169
+ else {
170
+ printError(`Unknown context type: ${type}`);
171
+ }
172
+ }
173
+ /**
174
+ * Show history
175
+ */
176
+ function showHistory(n = 10) {
177
+ console.log();
178
+ const count = Math.min(n, history.length);
179
+ const start = Math.max(0, history.length - count);
180
+ for (let i = start; i < history.length; i++) {
181
+ const num = String(i + 1).padStart(3);
182
+ console.log(` ${output.dim(num)} ${history[i]}`);
183
+ }
184
+ console.log();
185
+ }
186
+ /**
187
+ * Parse and execute command
188
+ */
189
+ async function executeCommand(input, program) {
190
+ const trimmed = input.trim();
191
+ if (!trimmed)
192
+ return true;
193
+ // Add to history
194
+ history.push(trimmed);
195
+ // Parse command
196
+ const parts = trimmed.split(/\s+/);
197
+ const cmd = parts[0]?.toLowerCase();
198
+ const args = parts.slice(1);
199
+ switch (cmd) {
200
+ case 'help':
201
+ case '?':
202
+ showHelp(args[0]);
203
+ break;
204
+ case 'exit':
205
+ case 'quit':
206
+ case 'q':
207
+ console.log('\nGoodbye!');
208
+ return false;
209
+ case 'clear':
210
+ console.clear();
211
+ break;
212
+ case 'context':
213
+ showContext();
214
+ break;
215
+ case 'use':
216
+ if (args.length < 2) {
217
+ printError('Usage: use contact|deal <id>');
218
+ }
219
+ else {
220
+ setContext(args[0], args[1]);
221
+ }
222
+ break;
223
+ case 'recent':
224
+ // Delegate to search recent
225
+ try {
226
+ await program.parseAsync(['recent', ...args], { from: 'user' });
227
+ }
228
+ catch (e) {
229
+ printError(String(e));
230
+ }
231
+ break;
232
+ case 'history':
233
+ showHistory(args[0] ? parseInt(args[0]) : 10);
234
+ break;
235
+ case 'config':
236
+ if (args[0] === 'location') {
237
+ console.log(`\nConfig file: ${getConfigLocation()}\n`);
238
+ }
239
+ else {
240
+ displayConfig();
241
+ }
242
+ break;
243
+ case 'contacts':
244
+ case 'deals':
245
+ case 'activities':
246
+ case 'media':
247
+ case 'search':
248
+ // Delegate to main program
249
+ try {
250
+ // Add context if not specified
251
+ const fullArgs = [...args];
252
+ if (cmd === 'activities' && !args.includes('-c') && !args.includes('--contact') && context.currentContact) {
253
+ if (args[0] === 'list') {
254
+ fullArgs.push('-c', context.currentContact);
255
+ }
256
+ }
257
+ if (cmd === 'media' && !args.includes('-c') && !args.includes('--contact') && context.currentContact) {
258
+ if (args[0] === 'list') {
259
+ fullArgs.push('-c', context.currentContact);
260
+ }
261
+ }
262
+ await program.parseAsync([cmd, ...fullArgs], { from: 'user' });
263
+ }
264
+ catch (e) {
265
+ printError(String(e));
266
+ }
267
+ break;
268
+ default:
269
+ printError(`Unknown command: ${cmd}`);
270
+ console.log(`Type ${output.info('help')} for available commands.`);
271
+ }
272
+ return true;
273
+ }
274
+ /**
275
+ * Start REPL
276
+ */
277
+ export async function startREPL(program) {
278
+ printHeader('CRM Interactive Mode');
279
+ console.log(`Type ${output.info('help')} for commands, ${output.info('exit')} to quit.`);
280
+ console.log();
281
+ const rl = createRL();
282
+ const promptForInput = () => {
283
+ rl.question(getPrompt(), async (input) => {
284
+ const shouldContinue = await executeCommand(input, program);
285
+ if (shouldContinue) {
286
+ promptForInput();
287
+ }
288
+ else {
289
+ rl.close();
290
+ process.exit(0);
291
+ }
292
+ });
293
+ };
294
+ // Handle Ctrl+C
295
+ rl.on('SIGINT', () => {
296
+ console.log('\n\nGoodbye!');
297
+ rl.close();
298
+ process.exit(0);
299
+ });
300
+ // Handle Ctrl+D
301
+ rl.on('close', () => {
302
+ console.log('\nGoodbye!');
303
+ process.exit(0);
304
+ });
305
+ promptForInput();
306
+ }
307
+ /**
308
+ * Register REPL command
309
+ */
310
+ export function registerREPLCommand(program) {
311
+ program
312
+ .command('repl')
313
+ .description('Start interactive REPL mode')
314
+ .action(async () => {
315
+ await startREPL(program);
316
+ });
317
+ }
318
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * CLI Configuration Management
3
+ *
4
+ * Handles loading, saving, and managing CLI configuration.
5
+ */
6
+ /**
7
+ * Configuration interface
8
+ */
9
+ export interface CLIConfig {
10
+ /** API endpoint for CRM backend */
11
+ apiEndpoint: string;
12
+ /** Default output format */
13
+ outputFormat: 'table' | 'json' | 'plain';
14
+ /** Default page size for lists */
15
+ pageSize: number;
16
+ /** Default currency */
17
+ currency: string;
18
+ /** Color output enabled */
19
+ colorEnabled: boolean;
20
+ /** Editor for multiline input */
21
+ editor?: string;
22
+ /** Recent contacts for quick access */
23
+ recentContacts: string[];
24
+ /** Recent deals for quick access */
25
+ recentDeals: string[];
26
+ /** Custom aliases */
27
+ aliases: Record<string, string>;
28
+ /** User preferences */
29
+ preferences: {
30
+ defaultStatus?: string;
31
+ defaultDealStage?: string;
32
+ defaultPriority?: string;
33
+ };
34
+ }
35
+ /**
36
+ * Load configuration from file
37
+ */
38
+ export declare function loadConfig(): CLIConfig;
39
+ /**
40
+ * Save configuration to file
41
+ */
42
+ export declare function saveConfig(config: CLIConfig): void;
43
+ /**
44
+ * Update specific config value
45
+ */
46
+ export declare function updateConfig<K extends keyof CLIConfig>(key: K, value: CLIConfig[K]): void;
47
+ /**
48
+ * Get a config value
49
+ */
50
+ export declare function getConfig<K extends keyof CLIConfig>(key: K): CLIConfig[K];
51
+ /**
52
+ * Add to recent contacts
53
+ */
54
+ export declare function addRecentContact(contactId: string): void;
55
+ /**
56
+ * Add to recent deals
57
+ */
58
+ export declare function addRecentDeal(dealId: string): void;
59
+ /**
60
+ * Set an alias
61
+ */
62
+ export declare function setAlias(name: string, command: string): void;
63
+ /**
64
+ * Remove an alias
65
+ */
66
+ export declare function removeAlias(name: string): boolean;
67
+ /**
68
+ * Resolve alias to command
69
+ */
70
+ export declare function resolveAlias(name: string): string | null;
71
+ /**
72
+ * Reset configuration to defaults
73
+ */
74
+ export declare function resetConfig(): void;
75
+ /**
76
+ * Display current configuration
77
+ */
78
+ export declare function displayConfig(): void;
79
+ /**
80
+ * Config file location
81
+ */
82
+ export declare function getConfigLocation(): string;
83
+ /**
84
+ * Environment variable overrides
85
+ */
86
+ export declare function applyEnvOverrides(config: CLIConfig): CLIConfig;
87
+ /**
88
+ * Initialize config with interactive prompts
89
+ */
90
+ export declare function initConfig(): Promise<void>;
91
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IAEpB,4BAA4B;IAC5B,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAEzC,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,YAAY,EAAE,OAAO,CAAC;IAEtB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,uBAAuB;IACvB,WAAW,EAAE;QACX,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AA4BD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAetC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,SAAS,EACpD,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAClB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EACjD,GAAG,EAAE,CAAC,GACL,SAAS,CAAC,CAAC,CAAC,CAGd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAqBpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAoB9D;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDhD"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * CLI Configuration Management
3
+ *
4
+ * Handles loading, saving, and managing CLI configuration.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ /**
10
+ * Default configuration
11
+ */
12
+ const DEFAULT_CONFIG = {
13
+ apiEndpoint: 'http://localhost:3000/api',
14
+ outputFormat: 'table',
15
+ pageSize: 20,
16
+ currency: 'USD',
17
+ colorEnabled: true,
18
+ recentContacts: [],
19
+ recentDeals: [],
20
+ aliases: {},
21
+ preferences: {},
22
+ };
23
+ /**
24
+ * Get config file path
25
+ */
26
+ function getConfigPath() {
27
+ const configDir = path.join(os.homedir(), '.crm');
28
+ if (!fs.existsSync(configDir)) {
29
+ fs.mkdirSync(configDir, { recursive: true });
30
+ }
31
+ return path.join(configDir, 'config.json');
32
+ }
33
+ /**
34
+ * Load configuration from file
35
+ */
36
+ export function loadConfig() {
37
+ const configPath = getConfigPath();
38
+ if (!fs.existsSync(configPath)) {
39
+ return { ...DEFAULT_CONFIG };
40
+ }
41
+ try {
42
+ const content = fs.readFileSync(configPath, 'utf-8');
43
+ const userConfig = JSON.parse(content);
44
+ return { ...DEFAULT_CONFIG, ...userConfig };
45
+ }
46
+ catch (error) {
47
+ console.error('Warning: Failed to load config, using defaults');
48
+ return { ...DEFAULT_CONFIG };
49
+ }
50
+ }
51
+ /**
52
+ * Save configuration to file
53
+ */
54
+ export function saveConfig(config) {
55
+ const configPath = getConfigPath();
56
+ try {
57
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
58
+ }
59
+ catch (error) {
60
+ console.error('Failed to save config:', error);
61
+ }
62
+ }
63
+ /**
64
+ * Update specific config value
65
+ */
66
+ export function updateConfig(key, value) {
67
+ const config = loadConfig();
68
+ config[key] = value;
69
+ saveConfig(config);
70
+ }
71
+ /**
72
+ * Get a config value
73
+ */
74
+ export function getConfig(key) {
75
+ const config = loadConfig();
76
+ return config[key];
77
+ }
78
+ /**
79
+ * Add to recent contacts
80
+ */
81
+ export function addRecentContact(contactId) {
82
+ const config = loadConfig();
83
+ const recent = config.recentContacts.filter((id) => id !== contactId);
84
+ recent.unshift(contactId);
85
+ config.recentContacts = recent.slice(0, 10); // Keep last 10
86
+ saveConfig(config);
87
+ }
88
+ /**
89
+ * Add to recent deals
90
+ */
91
+ export function addRecentDeal(dealId) {
92
+ const config = loadConfig();
93
+ const recent = config.recentDeals.filter((id) => id !== dealId);
94
+ recent.unshift(dealId);
95
+ config.recentDeals = recent.slice(0, 10); // Keep last 10
96
+ saveConfig(config);
97
+ }
98
+ /**
99
+ * Set an alias
100
+ */
101
+ export function setAlias(name, command) {
102
+ const config = loadConfig();
103
+ config.aliases[name] = command;
104
+ saveConfig(config);
105
+ }
106
+ /**
107
+ * Remove an alias
108
+ */
109
+ export function removeAlias(name) {
110
+ const config = loadConfig();
111
+ if (config.aliases[name]) {
112
+ delete config.aliases[name];
113
+ saveConfig(config);
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * Resolve alias to command
120
+ */
121
+ export function resolveAlias(name) {
122
+ const config = loadConfig();
123
+ return config.aliases[name] || null;
124
+ }
125
+ /**
126
+ * Reset configuration to defaults
127
+ */
128
+ export function resetConfig() {
129
+ saveConfig({ ...DEFAULT_CONFIG });
130
+ }
131
+ /**
132
+ * Display current configuration
133
+ */
134
+ export function displayConfig() {
135
+ const config = loadConfig();
136
+ console.log('\nCurrent Configuration:\n');
137
+ const entries = [
138
+ ['API Endpoint', config.apiEndpoint],
139
+ ['Output Format', config.outputFormat],
140
+ ['Page Size', config.pageSize],
141
+ ['Currency', config.currency],
142
+ ['Color Enabled', config.colorEnabled],
143
+ ['Editor', config.editor || '(system default)'],
144
+ ['Recent Contacts', config.recentContacts.length],
145
+ ['Recent Deals', config.recentDeals.length],
146
+ ['Aliases', Object.keys(config.aliases).length],
147
+ ];
148
+ for (const [key, value] of entries) {
149
+ console.log(` \x1b[36m${key}:\x1b[0m ${value}`);
150
+ }
151
+ console.log();
152
+ }
153
+ /**
154
+ * Config file location
155
+ */
156
+ export function getConfigLocation() {
157
+ return getConfigPath();
158
+ }
159
+ /**
160
+ * Environment variable overrides
161
+ */
162
+ export function applyEnvOverrides(config) {
163
+ const envConfig = { ...config };
164
+ if (process.env.CRM_API_ENDPOINT) {
165
+ envConfig.apiEndpoint = process.env.CRM_API_ENDPOINT;
166
+ }
167
+ if (process.env.CRM_OUTPUT_FORMAT) {
168
+ envConfig.outputFormat = process.env.CRM_OUTPUT_FORMAT;
169
+ }
170
+ if (process.env.CRM_CURRENCY) {
171
+ envConfig.currency = process.env.CRM_CURRENCY;
172
+ }
173
+ if (process.env.NO_COLOR) {
174
+ envConfig.colorEnabled = false;
175
+ }
176
+ return envConfig;
177
+ }
178
+ /**
179
+ * Initialize config with interactive prompts
180
+ */
181
+ export async function initConfig() {
182
+ const { prompt, confirm, select } = await import('./prompt.js');
183
+ console.log('\n\x1b[1mCRM CLI Configuration\x1b[0m\n');
184
+ console.log('Let\'s set up your CRM CLI configuration.\n');
185
+ const config = loadConfig();
186
+ // API Endpoint
187
+ const apiEndpoint = await prompt('API Endpoint', config.apiEndpoint);
188
+ if (apiEndpoint) {
189
+ config.apiEndpoint = apiEndpoint;
190
+ }
191
+ // Output format
192
+ config.outputFormat = await select('Default output format', ['table', 'json', 'plain'], config.outputFormat);
193
+ // Page size
194
+ const pageSizeStr = await prompt('Default page size', String(config.pageSize));
195
+ const pageSize = parseInt(pageSizeStr);
196
+ if (!isNaN(pageSize) && pageSize > 0) {
197
+ config.pageSize = pageSize;
198
+ }
199
+ // Currency
200
+ config.currency = await select('Default currency', ['USD', 'EUR', 'GBP', 'CAD', 'AUD', 'JPY'], config.currency);
201
+ // Color
202
+ config.colorEnabled = await confirm('Enable color output?', config.colorEnabled);
203
+ // Editor
204
+ const editor = await prompt('Editor for multiline input (e.g., vim, code)', config.editor);
205
+ if (editor) {
206
+ config.editor = editor;
207
+ }
208
+ saveConfig(config);
209
+ console.log('\n\x1b[32m\u2713 Configuration saved!\x1b[0m');
210
+ console.log(`\nConfig file: ${getConfigPath()}\n`);
211
+ }
212
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"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"}