@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,237 @@
1
+ /**
2
+ * STDIO transport for CRM MCP
3
+ * Handles communication over standard input/output
4
+ */
5
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
7
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
8
+ import { ToolHandlers } from '../tools/handlers.js';
9
+ import { TOOL_DEFINITIONS } from '../tools/definitions.js';
10
+ import { CRMError } from '../storage/types.js';
11
+ /**
12
+ * STDIO Server implementation for CRM
13
+ */
14
+ export class StdioServer {
15
+ storage;
16
+ server;
17
+ handlers;
18
+ constructor(storage) {
19
+ this.storage = storage;
20
+ this.server = new Server({
21
+ name: 'crm-mcp-server',
22
+ version: '0.1.0',
23
+ }, {
24
+ capabilities: {
25
+ tools: {},
26
+ },
27
+ });
28
+ this.handlers = new ToolHandlers(storage);
29
+ this.setupHandlers();
30
+ }
31
+ /**
32
+ * Set up MCP request handlers
33
+ */
34
+ setupHandlers() {
35
+ // List available tools
36
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
37
+ return {
38
+ tools: TOOL_DEFINITIONS,
39
+ };
40
+ });
41
+ // Handle tool calls
42
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
43
+ const { name, arguments: args } = request.params;
44
+ try {
45
+ let result;
46
+ // Contact tools
47
+ if (name === 'crm_create_contact') {
48
+ result = await this.handlers.createContact(args ?? {});
49
+ }
50
+ else if (name === 'crm_get_contact') {
51
+ result = await this.handlers.getContact(args ?? {});
52
+ }
53
+ else if (name === 'crm_update_contact') {
54
+ result = await this.handlers.updateContact(args ?? {});
55
+ }
56
+ else if (name === 'crm_delete_contact') {
57
+ result = await this.handlers.deleteContact(args ?? {});
58
+ }
59
+ else if (name === 'crm_list_contacts') {
60
+ result = await this.handlers.listContacts(args ?? {});
61
+ }
62
+ else if (name === 'crm_search_contacts') {
63
+ result = await this.handlers.searchContacts(args ?? {});
64
+ }
65
+ // Deal tools
66
+ else if (name === 'crm_create_deal') {
67
+ result = await this.handlers.createDeal(args ?? {});
68
+ }
69
+ else if (name === 'crm_get_deal') {
70
+ result = await this.handlers.getDeal(args ?? {});
71
+ }
72
+ else if (name === 'crm_update_deal') {
73
+ result = await this.handlers.updateDeal(args ?? {});
74
+ }
75
+ else if (name === 'crm_delete_deal') {
76
+ result = await this.handlers.deleteDeal(args ?? {});
77
+ }
78
+ else if (name === 'crm_list_deals') {
79
+ result = await this.handlers.listDeals(args ?? {});
80
+ }
81
+ else if (name === 'crm_get_deals_by_stage') {
82
+ result = await this.handlers.getDealsByStage(args ?? {});
83
+ }
84
+ // Activity tools
85
+ else if (name === 'crm_create_activity') {
86
+ result = await this.handlers.createActivity(args ?? {});
87
+ }
88
+ else if (name === 'crm_get_activity') {
89
+ result = await this.handlers.getActivity(args ?? {});
90
+ }
91
+ else if (name === 'crm_list_activities') {
92
+ result = await this.handlers.listActivities(args ?? {});
93
+ }
94
+ else if (name === 'crm_delete_activity') {
95
+ result = await this.handlers.deleteActivity(args ?? {});
96
+ }
97
+ // Media tools
98
+ else if (name === 'crm_upload_media') {
99
+ result = await this.handlers.uploadMedia(args ?? {});
100
+ }
101
+ else if (name === 'crm_get_media') {
102
+ result = await this.handlers.getMedia(args ?? {});
103
+ }
104
+ else if (name === 'crm_list_media') {
105
+ result = await this.handlers.listMedia(args ?? {});
106
+ }
107
+ else if (name === 'crm_delete_media') {
108
+ result = await this.handlers.deleteMedia(args ?? {});
109
+ }
110
+ // Note tools
111
+ else if (name === 'crm_create_note') {
112
+ result = await this.handlers.createNote(args ?? {});
113
+ }
114
+ else if (name === 'crm_get_note') {
115
+ result = await this.handlers.getNote(args ?? {});
116
+ }
117
+ else if (name === 'crm_update_note') {
118
+ result = await this.handlers.updateNote(args ?? {});
119
+ }
120
+ else if (name === 'crm_delete_note') {
121
+ result = await this.handlers.deleteNote(args ?? {});
122
+ }
123
+ else if (name === 'crm_list_notes') {
124
+ result = await this.handlers.listNotes(args ?? {});
125
+ }
126
+ // Tag tools
127
+ else if (name === 'crm_create_tag') {
128
+ result = await this.handlers.createTag(args ?? {});
129
+ }
130
+ else if (name === 'crm_get_tag') {
131
+ result = await this.handlers.getTag(args ?? {});
132
+ }
133
+ else if (name === 'crm_list_tags') {
134
+ result = await this.handlers.listTags(args ?? {});
135
+ }
136
+ else if (name === 'crm_delete_tag') {
137
+ result = await this.handlers.deleteTag(args ?? {});
138
+ }
139
+ // Company tools
140
+ else if (name === 'crm_create_company') {
141
+ result = await this.handlers.createCompany(args ?? {});
142
+ }
143
+ else if (name === 'crm_get_company') {
144
+ result = await this.handlers.getCompany(args ?? {});
145
+ }
146
+ else if (name === 'crm_update_company') {
147
+ result = await this.handlers.updateCompany(args ?? {});
148
+ }
149
+ else if (name === 'crm_delete_company') {
150
+ result = await this.handlers.deleteCompany(args ?? {});
151
+ }
152
+ else if (name === 'crm_list_companies') {
153
+ result = await this.handlers.listCompanies(args ?? {});
154
+ }
155
+ // Stats & Dashboard
156
+ else if (name === 'crm_get_stats') {
157
+ result = await this.handlers.getStats();
158
+ }
159
+ else if (name === 'crm_get_dashboard') {
160
+ result = await this.handlers.getDashboard(args ?? {});
161
+ }
162
+ // Unknown tool
163
+ else {
164
+ return {
165
+ content: [
166
+ {
167
+ type: 'text',
168
+ text: JSON.stringify({
169
+ success: false,
170
+ error: `Unknown tool: ${name}`,
171
+ }),
172
+ },
173
+ ],
174
+ };
175
+ }
176
+ return {
177
+ content: [
178
+ {
179
+ type: 'text',
180
+ text: JSON.stringify(result, null, 2),
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ catch (error) {
186
+ const errorMessage = error instanceof CRMError ? error.message : String(error);
187
+ return {
188
+ content: [
189
+ {
190
+ type: 'text',
191
+ text: JSON.stringify({
192
+ success: false,
193
+ error: errorMessage,
194
+ }),
195
+ },
196
+ ],
197
+ isError: true,
198
+ };
199
+ }
200
+ });
201
+ }
202
+ /**
203
+ * Start the STDIO server
204
+ */
205
+ async start() {
206
+ // Set up error handling
207
+ this.server.onerror = (error) => console.error('[CRM MCP Error]', error);
208
+ // Set up signal handlers for graceful shutdown
209
+ process.on('SIGINT', async () => {
210
+ console.error('[CRM MCP] Received SIGINT, shutting down...');
211
+ await this.server.close();
212
+ await this.storage.close();
213
+ process.exit(0);
214
+ });
215
+ process.on('SIGTERM', async () => {
216
+ console.error('[CRM MCP] Received SIGTERM, shutting down...');
217
+ await this.server.close();
218
+ await this.storage.close();
219
+ process.exit(0);
220
+ });
221
+ // Connect the transport
222
+ const transport = new StdioServerTransport();
223
+ await this.server.connect(transport);
224
+ // Log startup confirmation to stderr (doesn't interfere with JSON-RPC)
225
+ console.error('[CRM MCP] Server running on stdio');
226
+ // Keep stdin open to receive requests
227
+ process.stdin.resume();
228
+ }
229
+ /**
230
+ * Stop the server
231
+ */
232
+ async stop() {
233
+ await this.server.close();
234
+ await this.storage.close();
235
+ }
236
+ }
237
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/mcp/transports/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Telemetry module exports
3
+ *
4
+ * Provides unified access to logging, metrics, and tracing.
5
+ */
6
+ export { Logger, createLogger, logger, type LogLevel, type LogContext, type LogEntry, type LoggerConfig } from './logger.js';
7
+ export { MetricsRegistry, metrics, initializeCrmMetrics, type MetricType, type MetricLabel, type MetricValue, type MetricDefinition, type HistogramOptions } from './metrics.js';
8
+ export { Tracer, SpanHandle, tracer, createTracer, withSpan, type TraceContext, type SpanAttribute, type SpanEvent, type SpanLink, type SpanStatus, type Span, type TracerConfig } from './tracer.js';
9
+ /**
10
+ * Combined telemetry context for a request/operation
11
+ */
12
+ export declare class TelemetryContext {
13
+ readonly operation: string;
14
+ readonly logger: ReturnType<typeof logger.child>;
15
+ private span?;
16
+ private timer?;
17
+ constructor(operation: string, context?: Record<string, unknown>);
18
+ /**
19
+ * Start telemetry tracking for an operation
20
+ */
21
+ start(labels?: Record<string, string>): void;
22
+ /**
23
+ * Add an event to the span
24
+ */
25
+ addEvent(name: string, attributes?: Record<string, unknown>): void;
26
+ /**
27
+ * Set an attribute on the span
28
+ */
29
+ setAttribute(key: string, value: string | number | boolean): void;
30
+ /**
31
+ * Increment a metric
32
+ */
33
+ incrementMetric(name: string, value?: number, labels?: Record<string, string | number>): void;
34
+ /**
35
+ * Mark the operation as successful and end tracking
36
+ */
37
+ success(message?: string): void;
38
+ /**
39
+ * Mark the operation as failed and end tracking
40
+ */
41
+ failure(error: Error | string): void;
42
+ /**
43
+ * End telemetry tracking
44
+ */
45
+ private end;
46
+ }
47
+ /**
48
+ * Create a telemetry context for an operation
49
+ */
50
+ export declare function createTelemetryContext(operation: string, context?: Record<string, unknown>): TelemetryContext;
51
+ /**
52
+ * Wrap an async function with telemetry
53
+ */
54
+ export declare function withTelemetry<T>(operation: string, fn: (ctx: TelemetryContext) => Promise<T>, options?: {
55
+ context?: Record<string, unknown>;
56
+ labels?: Record<string, string>;
57
+ }): Promise<T>;
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7H,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjL,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtM;;GAEG;AACH,qBAAa,gBAAgB;aAMT,SAAS,EAAE,MAAM;IALnC,SAAgB,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAe;gBAGX,SAAS,EAAE,MAAM,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKnC;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAc5C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIlE;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAIjE;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;IAIhG;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAOpC;;OAEG;IACH,OAAO,CAAC,GAAG;CAOZ;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,gBAAgB,CAIlB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,GACA,OAAO,CAAC,CAAC,CAAC,CAYZ"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Telemetry module exports
3
+ *
4
+ * Provides unified access to logging, metrics, and tracing.
5
+ */
6
+ export { Logger, createLogger, logger } from './logger.js';
7
+ export { MetricsRegistry, metrics, initializeCrmMetrics } from './metrics.js';
8
+ export { Tracer, SpanHandle, tracer, createTracer, withSpan } from './tracer.js';
9
+ /**
10
+ * Combined telemetry context for a request/operation
11
+ */
12
+ export class TelemetryContext {
13
+ operation;
14
+ logger;
15
+ span;
16
+ timer;
17
+ constructor(operation, context) {
18
+ this.operation = operation;
19
+ this.logger = logger.child({ operation, ...context });
20
+ }
21
+ /**
22
+ * Start telemetry tracking for an operation
23
+ */
24
+ start(labels) {
25
+ this.span = tracer.startSpan(this.operation, {
26
+ kind: 'internal',
27
+ attributes: Object.entries(labels ?? {}).map(([key, value]) => ({
28
+ key,
29
+ value,
30
+ })),
31
+ });
32
+ this.timer = metrics.startTimer('operation_duration_seconds', {
33
+ operation: this.operation,
34
+ ...labels,
35
+ });
36
+ }
37
+ /**
38
+ * Add an event to the span
39
+ */
40
+ addEvent(name, attributes) {
41
+ this.span?.addEvent(name, attributes);
42
+ }
43
+ /**
44
+ * Set an attribute on the span
45
+ */
46
+ setAttribute(key, value) {
47
+ this.span?.setAttribute(key, value);
48
+ }
49
+ /**
50
+ * Increment a metric
51
+ */
52
+ incrementMetric(name, value = 1, labels) {
53
+ metrics.increment(name, value, labels ?? {});
54
+ }
55
+ /**
56
+ * Mark the operation as successful and end tracking
57
+ */
58
+ success(message) {
59
+ if (message) {
60
+ this.logger.info(message);
61
+ }
62
+ this.span?.ok();
63
+ this.end();
64
+ }
65
+ /**
66
+ * Mark the operation as failed and end tracking
67
+ */
68
+ failure(error) {
69
+ const err = typeof error === 'string' ? new Error(error) : error;
70
+ this.logger.error(err.message, err);
71
+ this.span?.recordException(err);
72
+ this.end();
73
+ }
74
+ /**
75
+ * End telemetry tracking
76
+ */
77
+ end() {
78
+ if (this.timer) {
79
+ const duration = this.timer();
80
+ this.span?.setAttribute('duration_ms', duration * 1000);
81
+ }
82
+ this.span?.end();
83
+ }
84
+ }
85
+ /**
86
+ * Create a telemetry context for an operation
87
+ */
88
+ export function createTelemetryContext(operation, context) {
89
+ const ctx = new TelemetryContext(operation, context);
90
+ ctx.start();
91
+ return ctx;
92
+ }
93
+ /**
94
+ * Wrap an async function with telemetry
95
+ */
96
+ export async function withTelemetry(operation, fn, options) {
97
+ const ctx = new TelemetryContext(operation, options?.context);
98
+ ctx.start(options?.labels);
99
+ try {
100
+ const result = await fn(ctx);
101
+ ctx.success();
102
+ return result;
103
+ }
104
+ catch (error) {
105
+ ctx.failure(error instanceof Error ? error : String(error));
106
+ throw error;
107
+ }
108
+ }
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Logger module for CRM system
3
+ *
4
+ * Provides structured logging with multiple log levels and formatters.
5
+ * Supports JSON output for production and pretty printing for development.
6
+ */
7
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
8
+ export interface LogContext {
9
+ [key: string]: unknown;
10
+ }
11
+ export interface LogEntry {
12
+ timestamp: string;
13
+ level: LogLevel;
14
+ message: string;
15
+ context?: LogContext;
16
+ error?: {
17
+ name: string;
18
+ message: string;
19
+ stack?: string;
20
+ };
21
+ duration?: number;
22
+ traceId?: string;
23
+ spanId?: string;
24
+ }
25
+ export interface LoggerConfig {
26
+ level: LogLevel;
27
+ service: string;
28
+ version: string;
29
+ env: 'development' | 'production' | 'test';
30
+ prettyPrint?: boolean;
31
+ includeStackTrace?: boolean;
32
+ }
33
+ /**
34
+ * Structured logger with context support
35
+ */
36
+ export declare class Logger {
37
+ private readonly level;
38
+ private readonly config;
39
+ private readonly defaultContext;
40
+ constructor(config: Partial<LoggerConfig> & {
41
+ service: string;
42
+ });
43
+ /**
44
+ * Create a child logger with additional context
45
+ */
46
+ child(context: LogContext): ChildLogger;
47
+ /**
48
+ * Log at trace level (most verbose)
49
+ */
50
+ trace(message: string, context?: LogContext): void;
51
+ /**
52
+ * Log at debug level
53
+ */
54
+ debug(message: string, context?: LogContext): void;
55
+ /**
56
+ * Log at info level
57
+ */
58
+ info(message: string, context?: LogContext): void;
59
+ /**
60
+ * Log at warn level
61
+ */
62
+ warn(message: string, context?: LogContext): void;
63
+ /**
64
+ * Log at error level
65
+ */
66
+ error(message: string, error?: Error | unknown, context?: LogContext): void;
67
+ /**
68
+ * Log at fatal level (application should exit after this)
69
+ */
70
+ fatal(message: string, error?: Error | unknown, context?: LogContext): void;
71
+ /**
72
+ * Log with timing information
73
+ */
74
+ time(message: string, durationMs: number, context?: LogContext): void;
75
+ /**
76
+ * Create a timer that logs duration when stopped
77
+ */
78
+ startTimer(message: string, context?: LogContext): () => number;
79
+ /**
80
+ * Add trace context to logs
81
+ */
82
+ withTrace(traceId: string, spanId?: string): Logger;
83
+ private log;
84
+ private createEntry;
85
+ private output;
86
+ private jsonOutput;
87
+ private prettyOutput;
88
+ }
89
+ /**
90
+ * Child logger with bound context
91
+ */
92
+ declare class ChildLogger {
93
+ private readonly parent;
94
+ private readonly context;
95
+ constructor(parent: Logger, context: LogContext);
96
+ trace(message: string, additionalContext?: LogContext): void;
97
+ debug(message: string, additionalContext?: LogContext): void;
98
+ info(message: string, additionalContext?: LogContext): void;
99
+ warn(message: string, additionalContext?: LogContext): void;
100
+ error(message: string, error?: Error | unknown, additionalContext?: LogContext): void;
101
+ fatal(message: string, error?: Error | unknown, additionalContext?: LogContext): void;
102
+ time(message: string, durationMs: number, additionalContext?: LogContext): void;
103
+ startTimer(message: string, additionalContext?: LogContext): () => number;
104
+ }
105
+ /**
106
+ * Default logger instance
107
+ */
108
+ export declare const logger: Logger;
109
+ /**
110
+ * Create a new logger instance
111
+ */
112
+ export declare function createLogger(config: Partial<LoggerConfig> & {
113
+ service: string;
114
+ }): Logger;
115
+ export {};
116
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/telemetry/logger.ts"],"names":[],"mappings":"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"}