@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,75 @@
1
+ export interface Contact {
2
+ id: string;
3
+ name: string;
4
+ email: string;
5
+ phone?: string;
6
+ company?: string;
7
+ title?: string;
8
+ status: 'lead' | 'prospect' | 'customer' | 'churned';
9
+ tags: string[];
10
+ notes?: string;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ }
14
+ export interface Deal {
15
+ id: string;
16
+ contactId: string;
17
+ title: string;
18
+ value: number;
19
+ currency: string;
20
+ stage: DealStage;
21
+ probability: number;
22
+ expectedCloseDate?: string;
23
+ description?: string;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ }
27
+ export type DealStage = 'discovery' | 'qualification' | 'proposal' | 'negotiation' | 'closed_won' | 'closed_lost';
28
+ export interface Activity {
29
+ id: string;
30
+ type: 'call' | 'email' | 'meeting' | 'note' | 'deal' | 'contact';
31
+ description: string;
32
+ contactId?: string;
33
+ dealId?: string;
34
+ userId: string;
35
+ timestamp: string;
36
+ metadata?: Record<string, unknown>;
37
+ }
38
+ export interface Media {
39
+ id: string;
40
+ filename: string;
41
+ mimetype: string;
42
+ size: number;
43
+ url: string;
44
+ thumbnailUrl?: string;
45
+ contactId?: string;
46
+ dealId?: string;
47
+ uploadedBy: string;
48
+ uploadedAt: string;
49
+ }
50
+ export interface DashboardStats {
51
+ totalContacts: number;
52
+ activeDeals: number;
53
+ pipelineValue: number;
54
+ wonThisMonth: number;
55
+ activitiesToday: number;
56
+ conversionRate: number;
57
+ }
58
+ export interface WSMessage {
59
+ type: 'connected' | 'activity' | 'deal_update' | 'contact_update' | 'media_upload';
60
+ payload?: unknown;
61
+ timestamp: string;
62
+ }
63
+ export interface APIResponse<T> {
64
+ success: boolean;
65
+ data?: T;
66
+ error?: string;
67
+ }
68
+ export interface PaginatedResponse<T> {
69
+ items: T[];
70
+ total: number;
71
+ page: number;
72
+ pageSize: number;
73
+ hasMore: boolean;
74
+ }
75
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/web/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // CRM Types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/web/types.ts"],"names":[],"mappings":"AAAA,YAAY"}
@@ -0,0 +1,571 @@
1
+ /**
2
+ * CRM Native Module - TypeScript Declarations
3
+ *
4
+ * High-performance Rust implementation for CRM operations.
5
+ */
6
+
7
+ // ============================================================================
8
+ // Search Index Types
9
+ // ============================================================================
10
+
11
+ export interface CrmSearchOptions {
12
+ /** Search query string */
13
+ query?: string;
14
+ /** Entity types to search in */
15
+ entityTypes?: Array<'contact' | 'deal' | 'company'>;
16
+ /** Maximum results to return */
17
+ limit?: number;
18
+ /** Offset for pagination */
19
+ offset?: number;
20
+ /** Filter by tags */
21
+ tags?: string[];
22
+ /** Minimum value (for deals) */
23
+ valueMin?: number;
24
+ /** Maximum value (for deals) */
25
+ valueMax?: number;
26
+ /** Created after timestamp (Unix ms) */
27
+ createdAfter?: number;
28
+ /** Created before timestamp (Unix ms) */
29
+ createdBefore?: number;
30
+ }
31
+
32
+ export interface CrmSearchResult {
33
+ /** Entity ID */
34
+ id: string;
35
+ /** Entity type */
36
+ entityType: 'contact' | 'deal' | 'company';
37
+ /** Search relevance score */
38
+ score: number;
39
+ /** Entity name or title */
40
+ name?: string;
41
+ /** Email (for contacts) */
42
+ email?: string;
43
+ /** Company name */
44
+ company?: string;
45
+ /** Title/position */
46
+ title?: string;
47
+ /** Tags */
48
+ tags?: string[];
49
+ /** Value (for deals) */
50
+ value?: number;
51
+ /** Stage (for deals) */
52
+ stage?: string;
53
+ }
54
+
55
+ export interface CrmIndexStats {
56
+ contactCount: number;
57
+ dealCount: number;
58
+ companyCount: number;
59
+ }
60
+
61
+ /**
62
+ * CRM Search Index for full-text search
63
+ */
64
+ export class CrmSearchIndex {
65
+ constructor(indexPath: string);
66
+
67
+ /**
68
+ * Execute a search query
69
+ */
70
+ search(options: CrmSearchOptions): CrmSearchResult[];
71
+
72
+ /**
73
+ * Add a document to the index
74
+ */
75
+ addDocument(doc: CrmSearchDocument): void;
76
+
77
+ /**
78
+ * Remove a document from the index
79
+ */
80
+ removeDocument(id: string): void;
81
+
82
+ /**
83
+ * Commit pending changes
84
+ */
85
+ commit(): void;
86
+
87
+ /**
88
+ * Get index statistics
89
+ */
90
+ getStats(): CrmIndexStats;
91
+ }
92
+
93
+ export interface CrmSearchDocument {
94
+ id: string;
95
+ entityType: 'contact' | 'deal' | 'company';
96
+ name?: string;
97
+ title?: string;
98
+ email?: string;
99
+ company?: string;
100
+ tags?: string[];
101
+ notes?: string;
102
+ value?: number;
103
+ stage?: string;
104
+ createdAt?: number;
105
+ updatedAt?: number;
106
+ }
107
+
108
+ // ============================================================================
109
+ // Index Manager Types
110
+ // ============================================================================
111
+
112
+ export interface CrmContact {
113
+ id: string;
114
+ name: string;
115
+ email?: string;
116
+ company?: string;
117
+ title?: string;
118
+ tags: string[];
119
+ notes?: string;
120
+ createdAt: number;
121
+ updatedAt: number;
122
+ }
123
+
124
+ export interface CrmDeal {
125
+ id: string;
126
+ title: string;
127
+ contactId: string;
128
+ value: number;
129
+ stage: string;
130
+ tags: string[];
131
+ notes?: string;
132
+ expectedClose?: number;
133
+ createdAt: number;
134
+ updatedAt: number;
135
+ }
136
+
137
+ export interface CrmCompany {
138
+ id: string;
139
+ name: string;
140
+ website?: string;
141
+ industry?: string;
142
+ tags: string[];
143
+ notes?: string;
144
+ createdAt: number;
145
+ updatedAt: number;
146
+ }
147
+
148
+ export interface CrmCounts {
149
+ contacts: number;
150
+ deals: number;
151
+ companies: number;
152
+ }
153
+
154
+ /**
155
+ * CRM Index Manager for CRUD operations
156
+ */
157
+ export class CrmIndexManager {
158
+ constructor();
159
+
160
+ /**
161
+ * Index a contact
162
+ */
163
+ indexContact(contact: CrmContact): void;
164
+
165
+ /**
166
+ * Get a contact by ID
167
+ */
168
+ getContact(id: string): CrmContact | null;
169
+
170
+ /**
171
+ * Remove a contact
172
+ */
173
+ removeContact(id: string): void;
174
+
175
+ /**
176
+ * Index a deal
177
+ */
178
+ indexDeal(deal: CrmDeal): void;
179
+
180
+ /**
181
+ * Get a deal by ID
182
+ */
183
+ getDeal(id: string): CrmDeal | null;
184
+
185
+ /**
186
+ * Remove a deal
187
+ */
188
+ removeDeal(id: string): void;
189
+
190
+ /**
191
+ * Index a company
192
+ */
193
+ indexCompany(company: CrmCompany): void;
194
+
195
+ /**
196
+ * Get a company by ID
197
+ */
198
+ getCompany(id: string): CrmCompany | null;
199
+
200
+ /**
201
+ * Remove a company
202
+ */
203
+ removeCompany(id: string): void;
204
+
205
+ /**
206
+ * Get counts of all indexed entities
207
+ */
208
+ getCounts(): CrmCounts;
209
+
210
+ /**
211
+ * Clear all indexes
212
+ */
213
+ clear(): void;
214
+ }
215
+
216
+ // ============================================================================
217
+ // Media Metadata Types
218
+ // ============================================================================
219
+
220
+ export interface MediaMetadata {
221
+ /** MIME type */
222
+ mimeType: string;
223
+ /** File size in bytes */
224
+ size: number;
225
+ /** Width (for images/videos) */
226
+ width: number | null;
227
+ /** Height (for images/videos) */
228
+ height: number | null;
229
+ /** Duration in seconds (for audio/video) */
230
+ duration: number | null;
231
+ /** Bitrate in kbps */
232
+ bitrate: number | null;
233
+ /** Codec information */
234
+ codec: string | null;
235
+ /** Additional metadata as JSON string */
236
+ extra: string | null;
237
+ }
238
+
239
+ export interface ImageMetadata {
240
+ /** Image width in pixels */
241
+ width: number;
242
+ /** Image height in pixels */
243
+ height: number;
244
+ /** Bits per channel */
245
+ bitsPerChannel: number | null;
246
+ /** Color space (RGB, RGBA, CMYK, etc.) */
247
+ colorSpace: string | null;
248
+ /** Has alpha channel */
249
+ hasAlpha: boolean;
250
+ /** Orientation (1-8 based on EXIF) */
251
+ orientation: number | null;
252
+ /** DPI for X axis */
253
+ dpiX: number | null;
254
+ /** DPI for Y axis */
255
+ dpiY: number | null;
256
+ /** Camera make (from EXIF) */
257
+ cameraMake: string | null;
258
+ /** Camera model (from EXIF) */
259
+ cameraModel: string | null;
260
+ /** Date taken (from EXIF) */
261
+ dateTaken: string | null;
262
+ /** GPS latitude */
263
+ gpsLatitude: number | null;
264
+ /** GPS longitude */
265
+ gpsLongitude: number | null;
266
+ }
267
+
268
+ export interface AudioMetadata {
269
+ /** Duration in seconds */
270
+ duration: number | null;
271
+ /** Sample rate in Hz */
272
+ sampleRate: number | null;
273
+ /** Number of channels */
274
+ channels: number | null;
275
+ /** Bits per sample */
276
+ bitsPerSample: number | null;
277
+ /** Bitrate in kbps */
278
+ bitrate: number | null;
279
+ /** Codec/format */
280
+ codec: string | null;
281
+ /** Title (from ID3/Vorbis comments) */
282
+ title: string | null;
283
+ /** Artist (from ID3/Vorbis comments) */
284
+ artist: string | null;
285
+ /** Album (from ID3/Vorbis comments) */
286
+ album: string | null;
287
+ /** Track number */
288
+ trackNumber: number | null;
289
+ /** Year */
290
+ year: number | null;
291
+ /** Genre */
292
+ genre: string | null;
293
+ }
294
+
295
+ export interface VideoMetadata {
296
+ /** Video width in pixels */
297
+ width: number | null;
298
+ /** Video height in pixels */
299
+ height: number | null;
300
+ /** Duration in seconds */
301
+ duration: number | null;
302
+ /** Frame rate */
303
+ frameRate: number | null;
304
+ /** Video codec */
305
+ videoCodec: string | null;
306
+ /** Audio codec */
307
+ audioCodec: string | null;
308
+ /** Video bitrate in kbps */
309
+ videoBitrate: number | null;
310
+ /** Audio bitrate in kbps */
311
+ audioBitrate: number | null;
312
+ /** Has audio track */
313
+ hasAudio: boolean;
314
+ /** Container format */
315
+ container: string | null;
316
+ /** Total bitrate */
317
+ totalBitrate: number | null;
318
+ }
319
+
320
+ export interface ImageDimensions {
321
+ width: number;
322
+ height: number;
323
+ }
324
+
325
+ export interface VideoDimensions {
326
+ width: number;
327
+ height: number;
328
+ }
329
+
330
+ // ============================================================================
331
+ // Media Functions
332
+ // ============================================================================
333
+
334
+ /**
335
+ * Extract metadata from a media file
336
+ */
337
+ export function extractMediaMetadata(filePath: string): MediaMetadata;
338
+
339
+ /**
340
+ * Batch extract metadata from multiple files
341
+ */
342
+ export function extractMediaMetadataBatch(filePaths: string[]): MediaMetadata[];
343
+
344
+ /**
345
+ * Generate thumbnail for an image
346
+ */
347
+ export function generateThumbnail(
348
+ inputPath: string,
349
+ outputPath: string,
350
+ maxWidth: number,
351
+ maxHeight: number
352
+ ): void;
353
+
354
+ /**
355
+ * Check if a file is a valid media type
356
+ */
357
+ export function isValidMediaType(filePath: string): boolean;
358
+
359
+ // ============================================================================
360
+ // Image Functions
361
+ // ============================================================================
362
+
363
+ /**
364
+ * Extract image metadata
365
+ */
366
+ export function extractImageMetadata(filePath: string): ImageMetadata;
367
+
368
+ /**
369
+ * Get image dimensions without loading full image
370
+ */
371
+ export function getImageDimensions(filePath: string): ImageDimensions;
372
+
373
+ /**
374
+ * Convert image format
375
+ */
376
+ export function convertImageFormat(
377
+ inputPath: string,
378
+ outputPath: string,
379
+ format: 'jpeg' | 'png' | 'gif' | 'webp' | 'bmp'
380
+ ): void;
381
+
382
+ // ============================================================================
383
+ // Audio Functions
384
+ // ============================================================================
385
+
386
+ /**
387
+ * Extract full audio metadata as structured object
388
+ */
389
+ export function extractFullAudioMetadata(filePath: string): AudioMetadata;
390
+
391
+ /**
392
+ * Get audio duration from file
393
+ */
394
+ export function getAudioDuration(filePath: string): number | null;
395
+
396
+ // ============================================================================
397
+ // Video Functions
398
+ // ============================================================================
399
+
400
+ /**
401
+ * Extract full video metadata as structured object
402
+ */
403
+ export function extractFullVideoMetadata(filePath: string): VideoMetadata;
404
+
405
+ /**
406
+ * Get video dimensions from file
407
+ */
408
+ export function getVideoDimensions(filePath: string): VideoDimensions;
409
+
410
+ /**
411
+ * Get video duration from file
412
+ */
413
+ export function getVideoDuration(filePath: string): number | null;
414
+
415
+ /**
416
+ * Check if video has audio track
417
+ */
418
+ export function videoHasAudio(filePath: string): boolean;
419
+
420
+ /**
421
+ * Get video codec information
422
+ */
423
+ export function getVideoCodec(filePath: string): string | null;
424
+
425
+ // ============================================================================
426
+ // Search Functions
427
+ // ============================================================================
428
+
429
+ /**
430
+ * Search contacts by name (fuzzy match)
431
+ */
432
+ export function searchContactsByName(
433
+ manager: CrmIndexManager,
434
+ nameQuery: string,
435
+ limit?: number
436
+ ): string[];
437
+
438
+ /**
439
+ * Search contacts by company name
440
+ */
441
+ export function searchContactsByCompany(
442
+ manager: CrmIndexManager,
443
+ companyQuery: string,
444
+ limit?: number
445
+ ): string[];
446
+
447
+ /**
448
+ * Search contacts by tags
449
+ */
450
+ export function searchContactsByTags(
451
+ manager: CrmIndexManager,
452
+ tags: string[],
453
+ matchAll: boolean,
454
+ limit?: number
455
+ ): string[];
456
+
457
+ /**
458
+ * Search contacts by email domain
459
+ */
460
+ export function searchContactsByEmailDomain(
461
+ manager: CrmIndexManager,
462
+ domain: string,
463
+ limit?: number
464
+ ): string[];
465
+
466
+ /**
467
+ * Search deals by title (fuzzy match)
468
+ */
469
+ export function searchDealsByTitle(
470
+ manager: CrmIndexManager,
471
+ titleQuery: string,
472
+ limit?: number
473
+ ): string[];
474
+
475
+ /**
476
+ * Search deals by stage
477
+ */
478
+ export function searchDealsByStage(
479
+ manager: CrmIndexManager,
480
+ stages: string[],
481
+ limit?: number
482
+ ): string[];
483
+
484
+ /**
485
+ * Search deals by value range
486
+ */
487
+ export function searchDealsByValueRange(
488
+ manager: CrmIndexManager,
489
+ minValue?: number,
490
+ maxValue?: number,
491
+ limit?: number
492
+ ): string[];
493
+
494
+ /**
495
+ * Search deals by contact ID
496
+ */
497
+ export function searchDealsByContact(
498
+ manager: CrmIndexManager,
499
+ contactId: string,
500
+ limit?: number
501
+ ): string[];
502
+
503
+ /**
504
+ * Search deals expected to close within date range
505
+ */
506
+ export function searchDealsClosingSoon(
507
+ manager: CrmIndexManager,
508
+ daysAhead: number,
509
+ limit?: number
510
+ ): string[];
511
+
512
+ /**
513
+ * Get total deal value by stage
514
+ */
515
+ export function getDealValuesByStage(manager: CrmIndexManager): Record<string, number>;
516
+
517
+ /**
518
+ * Search companies by name (fuzzy match)
519
+ */
520
+ export function searchCompaniesByName(
521
+ manager: CrmIndexManager,
522
+ nameQuery: string,
523
+ limit?: number
524
+ ): string[];
525
+
526
+ /**
527
+ * Search companies by industry
528
+ */
529
+ export function searchCompaniesByIndustry(
530
+ manager: CrmIndexManager,
531
+ industries: string[],
532
+ limit?: number
533
+ ): string[];
534
+
535
+ /**
536
+ * Search companies by tags
537
+ */
538
+ export function searchCompaniesByTags(
539
+ manager: CrmIndexManager,
540
+ tags: string[],
541
+ matchAll: boolean,
542
+ limit?: number
543
+ ): string[];
544
+
545
+ /**
546
+ * Search companies by website domain
547
+ */
548
+ export function searchCompaniesByWebsiteDomain(
549
+ manager: CrmIndexManager,
550
+ domain: string,
551
+ limit?: number
552
+ ): string[];
553
+
554
+ /**
555
+ * Get company statistics by industry
556
+ */
557
+ export function getCompanyStatsByIndustry(manager: CrmIndexManager): Record<string, number>;
558
+
559
+ // ============================================================================
560
+ // Utility Functions
561
+ // ============================================================================
562
+
563
+ /**
564
+ * Check if native module is available
565
+ */
566
+ export function isNativeAvailable(): boolean;
567
+
568
+ /**
569
+ * Get native module version
570
+ */
571
+ export function getNativeVersion(): string;