@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.
- package/README.md +174 -0
- package/dist/cli/commands/activities.d.ts +11 -0
- package/dist/cli/commands/activities.d.ts.map +1 -0
- package/dist/cli/commands/activities.js +427 -0
- package/dist/cli/commands/activities.js.map +1 -0
- package/dist/cli/commands/contacts.d.ts +11 -0
- package/dist/cli/commands/contacts.d.ts.map +1 -0
- package/dist/cli/commands/contacts.js +458 -0
- package/dist/cli/commands/contacts.js.map +1 -0
- package/dist/cli/commands/deals.d.ts +11 -0
- package/dist/cli/commands/deals.d.ts.map +1 -0
- package/dist/cli/commands/deals.js +498 -0
- package/dist/cli/commands/deals.js.map +1 -0
- package/dist/cli/commands/media.d.ts +11 -0
- package/dist/cli/commands/media.d.ts.map +1 -0
- package/dist/cli/commands/media.js +417 -0
- package/dist/cli/commands/media.js.map +1 -0
- package/dist/cli/commands/search.d.ts +11 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +346 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +173 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/repl.d.ts +15 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +318 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/utils/config.d.ts +91 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +212 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/output.d.ts +136 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +323 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +81 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +341 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +32 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schemas.d.ts +3050 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +667 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/types.d.ts +597 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +14 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +18 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/storage/client.d.ts +109 -0
- package/dist/mcp/storage/client.d.ts.map +1 -0
- package/dist/mcp/storage/client.js +355 -0
- package/dist/mcp/storage/client.js.map +1 -0
- package/dist/mcp/storage/index.d.ts +7 -0
- package/dist/mcp/storage/index.d.ts.map +1 -0
- package/dist/mcp/storage/index.js +6 -0
- package/dist/mcp/storage/index.js.map +1 -0
- package/dist/mcp/storage/types.d.ts +44 -0
- package/dist/mcp/storage/types.d.ts.map +1 -0
- package/dist/mcp/storage/types.js +35 -0
- package/dist/mcp/storage/types.js.map +1 -0
- package/dist/mcp/tools/definitions.d.ts +16 -0
- package/dist/mcp/tools/definitions.d.ts.map +1 -0
- package/dist/mcp/tools/definitions.js +914 -0
- package/dist/mcp/tools/definitions.js.map +1 -0
- package/dist/mcp/tools/handlers.d.ts +50 -0
- package/dist/mcp/tools/handlers.d.ts.map +1 -0
- package/dist/mcp/tools/handlers.js +760 -0
- package/dist/mcp/tools/handlers.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +7 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +6 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/types.d.ts +314 -0
- package/dist/mcp/tools/types.d.ts.map +1 -0
- package/dist/mcp/tools/types.js +5 -0
- package/dist/mcp/tools/types.js.map +1 -0
- package/dist/mcp/transports/stdio.d.ts +27 -0
- package/dist/mcp/transports/stdio.d.ts.map +1 -0
- package/dist/mcp/transports/stdio.js +237 -0
- package/dist/mcp/transports/stdio.js.map +1 -0
- package/dist/telemetry/index.d.ts +58 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +109 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logger.d.ts +116 -0
- package/dist/telemetry/logger.d.ts.map +1 -0
- package/dist/telemetry/logger.js +256 -0
- package/dist/telemetry/logger.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +115 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +292 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/tracer.d.ts +227 -0
- package/dist/telemetry/tracer.d.ts.map +1 -0
- package/dist/telemetry/tracer.js +355 -0
- package/dist/telemetry/tracer.js.map +1 -0
- package/dist/web/app.d.ts +2 -0
- package/dist/web/app.d.ts.map +1 -0
- package/dist/web/app.js +115 -0
- package/dist/web/app.js.map +1 -0
- package/dist/web/components/ContactList.d.ts +3 -0
- package/dist/web/components/ContactList.d.ts.map +1 -0
- package/dist/web/components/ContactList.js +262 -0
- package/dist/web/components/ContactList.js.map +1 -0
- package/dist/web/components/Dashboard.d.ts +3 -0
- package/dist/web/components/Dashboard.d.ts.map +1 -0
- package/dist/web/components/Dashboard.js +158 -0
- package/dist/web/components/Dashboard.js.map +1 -0
- package/dist/web/components/DealPipeline.d.ts +3 -0
- package/dist/web/components/DealPipeline.d.ts.map +1 -0
- package/dist/web/components/DealPipeline.js +306 -0
- package/dist/web/components/DealPipeline.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +269 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/types.d.ts +75 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +3 -0
- package/dist/web/types.js.map +1 -0
- package/native/index.d.ts +571 -0
- package/native/index.js +687 -0
- package/package.json +105 -0
- package/src/cli/commands/activities.ts +543 -0
- package/src/cli/commands/contacts.ts +563 -0
- package/src/cli/commands/deals.ts +637 -0
- package/src/cli/commands/media.ts +521 -0
- package/src/cli/commands/search.ts +426 -0
- package/src/cli/index.ts +203 -0
- package/src/cli/repl.ts +379 -0
- package/src/cli/utils/config.ts +299 -0
- package/src/cli/utils/output.ts +386 -0
- package/src/cli/utils/prompt.ts +444 -0
- package/src/cli.ts +11 -0
- package/src/core/index.ts +184 -0
- package/src/core/schemas.ts +770 -0
- package/src/core/types.ts +969 -0
- package/src/index.ts +8 -0
- package/src/mcp/index.ts +17 -0
- package/src/mcp/server.ts +26 -0
- package/src/mcp/storage/client.ts +408 -0
- package/src/mcp/storage/index.ts +7 -0
- package/src/mcp/storage/types.ts +72 -0
- package/src/mcp/tools/definitions.ts +961 -0
- package/src/mcp/tools/handlers.ts +805 -0
- package/src/mcp/tools/index.ts +7 -0
- package/src/mcp/tools/types.ts +390 -0
- package/src/mcp/transports/stdio.ts +225 -0
- package/src/telemetry/index.ts +131 -0
- package/src/telemetry/logger.ts +318 -0
- package/src/telemetry/metrics.ts +393 -0
- package/src/telemetry/tracer.ts +487 -0
- package/src/web/api/activities.ts +41 -0
- package/src/web/api/contacts.ts +114 -0
- package/src/web/api/deals.ts +108 -0
- package/src/web/api/media.ts +98 -0
- package/src/web/app.tsx +143 -0
- package/src/web/components/ActivityFeed.tsx +195 -0
- package/src/web/components/ContactList.tsx +340 -0
- package/src/web/components/Dashboard.tsx +214 -0
- package/src/web/components/DealPipeline.tsx +405 -0
- package/src/web/components/MediaGallery.tsx +334 -0
- package/src/web/index.html +14 -0
- package/src/web/index.ts +326 -0
- package/src/web/styles/main.css +180 -0
- 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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,WAAW;IAIF;IAHZ,MAAM,CAAS;IACf,QAAQ,CAAe;IAE/B,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE,gBAAgB;aACxB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC;gBAEX,gBAAgB;gBAChB,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBAClC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACxC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACxD,CAAC;qBAAM,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAC1C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,aAAa;qBACR,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACpC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;oBACnC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACrC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBAC7C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,iBAAiB;qBACZ,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBACxC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACvC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAC1C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAC1C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,cAAc;qBACT,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACrC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;oBACpC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACrC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACvC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACD,aAAa;qBACR,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACpC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;oBACnC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACrC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,YAAY;qBACP,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACnC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;oBAClC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;oBACpC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACrC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,gBAAgB;qBACX,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACvC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,oBAAoB;qBACf,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;oBAClC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC1C,CAAC;qBAAM,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACxC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACxD,CAAC;gBACD,eAAe;qBACV,CAAC;oBACJ,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oCACnB,OAAO,EAAE,KAAK;oCACd,KAAK,EAAE,iBAAiB,IAAI,EAAE;iCAC/B,CAAC;6BACH;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/E,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,YAAY;6BACpB,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAEzE,+CAA+C;QAC/C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAErC,uEAAuE;QACvE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAEnD,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -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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"}
|