@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,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 @@
|
|
|
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;
|