@hasna/contacts 0.2.2 → 0.2.3
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/dist/cli/index.js +144 -14
- package/dist/db/companies.d.ts +2 -0
- package/dist/db/companies.d.ts.map +1 -1
- package/dist/db/contacts.d.ts +7 -1
- package/dist/db/contacts.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/groups.d.ts +11 -1
- package/dist/db/groups.d.ts.map +1 -1
- package/dist/db/tags.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +274 -16
- package/dist/mcp/index.js +665 -31
- package/dist/server/index.js +115 -10
- package/dist/types/index.d.ts +41 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +21 -30
package/dist/cli/index.js
CHANGED
|
@@ -5,25 +5,43 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
function __accessProp(key) {
|
|
9
|
+
return this[key];
|
|
10
|
+
}
|
|
11
|
+
var __toESMCache_node;
|
|
12
|
+
var __toESMCache_esm;
|
|
8
13
|
var __toESM = (mod, isNodeMode, target) => {
|
|
14
|
+
var canCache = mod != null && typeof mod === "object";
|
|
15
|
+
if (canCache) {
|
|
16
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
17
|
+
var cached = cache.get(mod);
|
|
18
|
+
if (cached)
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
9
21
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
22
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
23
|
for (let key of __getOwnPropNames(mod))
|
|
12
24
|
if (!__hasOwnProp.call(to, key))
|
|
13
25
|
__defProp(to, key, {
|
|
14
|
-
get: (
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
15
27
|
enumerable: true
|
|
16
28
|
});
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
17
31
|
return to;
|
|
18
32
|
};
|
|
19
33
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __returnValue = (v) => v;
|
|
35
|
+
function __exportSetter(name, newValue) {
|
|
36
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
37
|
+
}
|
|
20
38
|
var __export = (target, all) => {
|
|
21
39
|
for (var name in all)
|
|
22
40
|
__defProp(target, name, {
|
|
23
41
|
get: all[name],
|
|
24
42
|
enumerable: true,
|
|
25
43
|
configurable: true,
|
|
26
|
-
set: (
|
|
44
|
+
set: __exportSetter.bind(all, name)
|
|
27
45
|
});
|
|
28
46
|
};
|
|
29
47
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
@@ -2331,6 +2349,20 @@ var init_database = __esm(() => {
|
|
|
2331
2349
|
group_id TEXT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
2332
2350
|
PRIMARY KEY (contact_id, group_id)
|
|
2333
2351
|
);
|
|
2352
|
+
`,
|
|
2353
|
+
`
|
|
2354
|
+
ALTER TABLE contacts ADD COLUMN status TEXT DEFAULT 'active';
|
|
2355
|
+
ALTER TABLE contacts ADD COLUMN follow_up_at TEXT;
|
|
2356
|
+
ALTER TABLE contacts ADD COLUMN archived INTEGER NOT NULL DEFAULT 0;
|
|
2357
|
+
ALTER TABLE contacts ADD COLUMN project_id TEXT;
|
|
2358
|
+
ALTER TABLE companies ADD COLUMN archived INTEGER NOT NULL DEFAULT 0;
|
|
2359
|
+
ALTER TABLE companies ADD COLUMN project_id TEXT;
|
|
2360
|
+
|
|
2361
|
+
CREATE TABLE IF NOT EXISTS company_groups (
|
|
2362
|
+
company_id TEXT NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
|
2363
|
+
group_id TEXT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
2364
|
+
PRIMARY KEY (company_id, group_id)
|
|
2365
|
+
);
|
|
2334
2366
|
`
|
|
2335
2367
|
];
|
|
2336
2368
|
});
|
|
@@ -2351,7 +2383,11 @@ function rowToContact(row) {
|
|
|
2351
2383
|
...row,
|
|
2352
2384
|
source: row.source,
|
|
2353
2385
|
custom_fields: JSON.parse(row.custom_fields || "{}"),
|
|
2354
|
-
preferred_contact_method: row.preferred_contact_method ?? null
|
|
2386
|
+
preferred_contact_method: row.preferred_contact_method ?? null,
|
|
2387
|
+
status: row.status ?? "active",
|
|
2388
|
+
follow_up_at: row.follow_up_at ?? null,
|
|
2389
|
+
archived: !!row.archived,
|
|
2390
|
+
project_id: row.project_id ?? null
|
|
2355
2391
|
};
|
|
2356
2392
|
}
|
|
2357
2393
|
function rowToEmail(row) {
|
|
@@ -2388,7 +2424,9 @@ function rowToTag(row) {
|
|
|
2388
2424
|
function rowToCompany(row) {
|
|
2389
2425
|
return {
|
|
2390
2426
|
...row,
|
|
2391
|
-
custom_fields: JSON.parse(row.custom_fields || "{}")
|
|
2427
|
+
custom_fields: JSON.parse(row.custom_fields || "{}"),
|
|
2428
|
+
archived: !!row.archived,
|
|
2429
|
+
project_id: row.project_id ?? null
|
|
2392
2430
|
};
|
|
2393
2431
|
}
|
|
2394
2432
|
function insertEmails(db, contactId, companyId, emails) {
|
|
@@ -2432,8 +2470,8 @@ function createContact(input, db) {
|
|
|
2432
2470
|
const firstName = input.first_name ?? "";
|
|
2433
2471
|
const lastName = input.last_name ?? "";
|
|
2434
2472
|
const displayName = input.display_name ?? (firstName || lastName ? `${firstName} ${lastName}`.trim() : "Unnamed Contact");
|
|
2435
|
-
d.run(`INSERT INTO contacts (id, first_name, last_name, display_name, nickname, avatar_url, notes, birthday, company_id, job_title, source, custom_fields, last_contacted_at, website, preferred_contact_method, created_at, updated_at)
|
|
2436
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
2473
|
+
d.run(`INSERT INTO contacts (id, first_name, last_name, display_name, nickname, avatar_url, notes, birthday, company_id, job_title, source, custom_fields, last_contacted_at, website, preferred_contact_method, status, follow_up_at, project_id, created_at, updated_at)
|
|
2474
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
2437
2475
|
id,
|
|
2438
2476
|
firstName,
|
|
2439
2477
|
lastName,
|
|
@@ -2449,6 +2487,9 @@ function createContact(input, db) {
|
|
|
2449
2487
|
input.last_contacted_at ?? null,
|
|
2450
2488
|
input.website ?? null,
|
|
2451
2489
|
input.preferred_contact_method ?? null,
|
|
2490
|
+
input.status ?? "active",
|
|
2491
|
+
input.follow_up_at ?? null,
|
|
2492
|
+
input.project_id ?? null,
|
|
2452
2493
|
timestamp,
|
|
2453
2494
|
timestamp
|
|
2454
2495
|
]);
|
|
@@ -2483,12 +2524,21 @@ function listContacts(opts = {}, db) {
|
|
|
2483
2524
|
offset = 0,
|
|
2484
2525
|
company_id,
|
|
2485
2526
|
tag_id,
|
|
2527
|
+
tag_ids,
|
|
2486
2528
|
source,
|
|
2529
|
+
status,
|
|
2530
|
+
project_id,
|
|
2531
|
+
archived = false,
|
|
2532
|
+
follow_up_due,
|
|
2533
|
+
last_contacted_after,
|
|
2534
|
+
last_contacted_before,
|
|
2487
2535
|
order_by = "display_name",
|
|
2488
2536
|
order_dir = "asc"
|
|
2489
2537
|
} = opts;
|
|
2490
2538
|
const conditions = [];
|
|
2491
2539
|
const params = [];
|
|
2540
|
+
conditions.push("c.archived = ?");
|
|
2541
|
+
params.push(archived ? 1 : 0);
|
|
2492
2542
|
if (company_id) {
|
|
2493
2543
|
conditions.push("c.company_id = ?");
|
|
2494
2544
|
params.push(company_id);
|
|
@@ -2497,12 +2547,37 @@ function listContacts(opts = {}, db) {
|
|
|
2497
2547
|
conditions.push("c.source = ?");
|
|
2498
2548
|
params.push(source);
|
|
2499
2549
|
}
|
|
2550
|
+
if (status) {
|
|
2551
|
+
conditions.push("c.status = ?");
|
|
2552
|
+
params.push(status);
|
|
2553
|
+
}
|
|
2554
|
+
if (project_id) {
|
|
2555
|
+
conditions.push("c.project_id = ?");
|
|
2556
|
+
params.push(project_id);
|
|
2557
|
+
}
|
|
2500
2558
|
if (tag_id) {
|
|
2501
2559
|
conditions.push("EXISTS (SELECT 1 FROM contact_tags ct WHERE ct.contact_id = c.id AND ct.tag_id = ?)");
|
|
2502
2560
|
params.push(tag_id);
|
|
2503
2561
|
}
|
|
2562
|
+
if (tag_ids?.length) {
|
|
2563
|
+
for (const tid of tag_ids) {
|
|
2564
|
+
conditions.push("EXISTS (SELECT 1 FROM contact_tags ct WHERE ct.contact_id = c.id AND ct.tag_id = ?)");
|
|
2565
|
+
params.push(tid);
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
if (follow_up_due) {
|
|
2569
|
+
conditions.push("c.follow_up_at IS NOT NULL AND c.follow_up_at <= datetime('now')");
|
|
2570
|
+
}
|
|
2571
|
+
if (last_contacted_after) {
|
|
2572
|
+
conditions.push("c.last_contacted_at >= ?");
|
|
2573
|
+
params.push(last_contacted_after);
|
|
2574
|
+
}
|
|
2575
|
+
if (last_contacted_before) {
|
|
2576
|
+
conditions.push("c.last_contacted_at <= ?");
|
|
2577
|
+
params.push(last_contacted_before);
|
|
2578
|
+
}
|
|
2504
2579
|
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
2505
|
-
const validOrderBy = ["display_name", "created_at", "updated_at"].includes(order_by) ? order_by : "display_name";
|
|
2580
|
+
const validOrderBy = ["display_name", "created_at", "updated_at", "last_contacted_at", "follow_up_at"].includes(order_by) ? order_by : "display_name";
|
|
2506
2581
|
const validOrderDir = order_dir === "desc" ? "DESC" : "ASC";
|
|
2507
2582
|
const totalRow = d.query(`SELECT COUNT(*) as total FROM contacts c ${where}`).get(...params);
|
|
2508
2583
|
const rows = d.query(`SELECT c.* FROM contacts c ${where} ORDER BY c.${validOrderBy} ${validOrderDir} LIMIT ? OFFSET ?`).all(...params, limit, offset);
|
|
@@ -2572,8 +2647,36 @@ function updateContact(id, input, db) {
|
|
|
2572
2647
|
setClauses.push("preferred_contact_method = ?");
|
|
2573
2648
|
params.push(input.preferred_contact_method);
|
|
2574
2649
|
}
|
|
2650
|
+
if (input.status !== undefined) {
|
|
2651
|
+
setClauses.push("status = ?");
|
|
2652
|
+
params.push(input.status);
|
|
2653
|
+
}
|
|
2654
|
+
if (input.follow_up_at !== undefined) {
|
|
2655
|
+
setClauses.push("follow_up_at = ?");
|
|
2656
|
+
params.push(input.follow_up_at);
|
|
2657
|
+
}
|
|
2658
|
+
if (input.project_id !== undefined) {
|
|
2659
|
+
setClauses.push("project_id = ?");
|
|
2660
|
+
params.push(input.project_id);
|
|
2661
|
+
}
|
|
2575
2662
|
params.push(id);
|
|
2576
2663
|
d.run(`UPDATE contacts SET ${setClauses.join(", ")} WHERE id = ?`, params);
|
|
2664
|
+
if (input.emails_add?.length) {
|
|
2665
|
+
for (const e of input.emails_add) {
|
|
2666
|
+
const exists = d.query(`SELECT id FROM emails WHERE contact_id = ? AND LOWER(address) = LOWER(?)`).get(id, e.address);
|
|
2667
|
+
if (!exists) {
|
|
2668
|
+
d.run(`INSERT INTO emails (id, contact_id, company_id, address, type, is_primary) VALUES (?, ?, NULL, ?, ?, ?)`, [uuid(), id, e.address, e.type ?? "work", e.is_primary ? 1 : 0]);
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
}
|
|
2672
|
+
if (input.phones_add?.length) {
|
|
2673
|
+
for (const p of input.phones_add) {
|
|
2674
|
+
const exists = d.query(`SELECT id FROM phones WHERE contact_id = ? AND number = ?`).get(id, p.number);
|
|
2675
|
+
if (!exists) {
|
|
2676
|
+
d.run(`INSERT INTO phones (id, contact_id, company_id, number, country_code, type, is_primary) VALUES (?, ?, NULL, ?, ?, ?, ?)`, [uuid(), id, p.number, p.country_code ?? null, p.type ?? "mobile", p.is_primary ? 1 : 0]);
|
|
2677
|
+
}
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2577
2680
|
logActivity(d, { contact_id: id, action: "contact.updated", details: `Updated contact: ${existing.display_name}` });
|
|
2578
2681
|
const row = d.query(`SELECT * FROM contacts WHERE id = ?`).get(id);
|
|
2579
2682
|
return loadContactDetails(d, rowToContact(row));
|
|
@@ -2591,25 +2694,31 @@ function searchContacts(query, db) {
|
|
|
2591
2694
|
const ftsRows = d.query(`
|
|
2592
2695
|
SELECT c.* FROM contacts c
|
|
2593
2696
|
JOIN contacts_fts fts ON fts.id = c.id
|
|
2594
|
-
WHERE contacts_fts MATCH ?
|
|
2697
|
+
WHERE contacts_fts MATCH ? AND c.archived = 0
|
|
2595
2698
|
ORDER BY rank
|
|
2596
2699
|
LIMIT 50
|
|
2597
2700
|
`).all(`"${query.replace(/"/g, '""')}"*`);
|
|
2598
2701
|
const emailRows = d.query(`
|
|
2599
2702
|
SELECT DISTINCT c.* FROM contacts c
|
|
2600
2703
|
JOIN emails e ON e.contact_id = c.id
|
|
2601
|
-
WHERE e.address LIKE ?
|
|
2704
|
+
WHERE e.address LIKE ? AND c.archived = 0
|
|
2602
2705
|
LIMIT 20
|
|
2603
2706
|
`).all(`%${query}%`);
|
|
2604
2707
|
const phoneRows = d.query(`
|
|
2605
2708
|
SELECT DISTINCT c.* FROM contacts c
|
|
2606
2709
|
JOIN phones p ON p.contact_id = c.id
|
|
2607
|
-
WHERE p.number LIKE ?
|
|
2710
|
+
WHERE p.number LIKE ? AND c.archived = 0
|
|
2711
|
+
LIMIT 20
|
|
2712
|
+
`).all(`%${query}%`);
|
|
2713
|
+
const companyRows = d.query(`
|
|
2714
|
+
SELECT DISTINCT c.* FROM contacts c
|
|
2715
|
+
JOIN companies co ON co.id = c.company_id
|
|
2716
|
+
WHERE co.name LIKE ? AND c.archived = 0
|
|
2608
2717
|
LIMIT 20
|
|
2609
2718
|
`).all(`%${query}%`);
|
|
2610
2719
|
const seen = new Set;
|
|
2611
2720
|
const allRows = [];
|
|
2612
|
-
for (const row of [...ftsRows, ...emailRows, ...phoneRows]) {
|
|
2721
|
+
for (const row of [...ftsRows, ...emailRows, ...phoneRows, ...companyRows]) {
|
|
2613
2722
|
if (!seen.has(row.id)) {
|
|
2614
2723
|
seen.add(row.id);
|
|
2615
2724
|
allRows.push(row);
|
|
@@ -2632,7 +2741,9 @@ var init_contacts = __esm(() => {
|
|
|
2632
2741
|
function rowToCompany2(row) {
|
|
2633
2742
|
return {
|
|
2634
2743
|
...row,
|
|
2635
|
-
custom_fields: JSON.parse(row.custom_fields || "{}")
|
|
2744
|
+
custom_fields: JSON.parse(row.custom_fields || "{}"),
|
|
2745
|
+
archived: !!row.archived,
|
|
2746
|
+
project_id: row.project_id ?? null
|
|
2636
2747
|
};
|
|
2637
2748
|
}
|
|
2638
2749
|
function insertEmails2(db, companyId, emails) {
|
|
@@ -2742,15 +2853,23 @@ function listCompanies(opts = {}, db) {
|
|
|
2742
2853
|
offset = 0,
|
|
2743
2854
|
industry,
|
|
2744
2855
|
tag_id,
|
|
2856
|
+
project_id,
|
|
2857
|
+
archived = false,
|
|
2745
2858
|
order_by = "name",
|
|
2746
2859
|
order_dir = "asc"
|
|
2747
2860
|
} = opts;
|
|
2748
2861
|
const conditions = [];
|
|
2749
2862
|
const params = [];
|
|
2863
|
+
conditions.push("co.archived = ?");
|
|
2864
|
+
params.push(archived ? 1 : 0);
|
|
2750
2865
|
if (industry) {
|
|
2751
2866
|
conditions.push("co.industry = ?");
|
|
2752
2867
|
params.push(industry);
|
|
2753
2868
|
}
|
|
2869
|
+
if (project_id) {
|
|
2870
|
+
conditions.push("co.project_id = ?");
|
|
2871
|
+
params.push(project_id);
|
|
2872
|
+
}
|
|
2754
2873
|
if (tag_id) {
|
|
2755
2874
|
conditions.push("EXISTS (SELECT 1 FROM company_tags ct WHERE ct.company_id = co.id AND ct.tag_id = ?)");
|
|
2756
2875
|
params.push(tag_id);
|
|
@@ -2806,6 +2925,10 @@ function updateCompany(id, input, db) {
|
|
|
2806
2925
|
setClauses.push("custom_fields = ?");
|
|
2807
2926
|
params.push(JSON.stringify(input.custom_fields));
|
|
2808
2927
|
}
|
|
2928
|
+
if ("project_id" in input && input.project_id !== undefined) {
|
|
2929
|
+
setClauses.push("project_id = ?");
|
|
2930
|
+
params.push(input.project_id);
|
|
2931
|
+
}
|
|
2809
2932
|
params.push(id);
|
|
2810
2933
|
d.run(`UPDATE companies SET ${setClauses.join(", ")} WHERE id = ?`, params);
|
|
2811
2934
|
logActivity(d, { company_id: id, action: "company.updated", details: `Updated company: ${existing.name}` });
|
|
@@ -3614,10 +3737,17 @@ function getGroup(db, id) {
|
|
|
3614
3737
|
return db.query(`SELECT * FROM groups WHERE id = ?`).get(id);
|
|
3615
3738
|
}
|
|
3616
3739
|
function listGroups(db) {
|
|
3617
|
-
return db.query(`SELECT g.*,
|
|
3740
|
+
return db.query(`SELECT g.*,
|
|
3741
|
+
(SELECT COUNT(*) FROM contact_groups cg WHERE cg.group_id = g.id) as member_count,
|
|
3742
|
+
(SELECT COUNT(*) FROM company_groups cog WHERE cog.group_id = g.id) as company_count
|
|
3743
|
+
FROM groups g ORDER BY g.name`).all();
|
|
3618
3744
|
}
|
|
3619
3745
|
function addContactToGroup(db, contactId, groupId) {
|
|
3620
|
-
db.query(`
|
|
3746
|
+
const existing = db.query(`SELECT 1 FROM contact_groups WHERE contact_id = ? AND group_id = ?`).get(contactId, groupId);
|
|
3747
|
+
if (existing)
|
|
3748
|
+
return { added: false, already_member: true };
|
|
3749
|
+
db.query(`INSERT INTO contact_groups(contact_id, group_id) VALUES(?,?)`).run(contactId, groupId);
|
|
3750
|
+
return { added: true, already_member: false };
|
|
3621
3751
|
}
|
|
3622
3752
|
function removeContactFromGroup(db, contactId, groupId) {
|
|
3623
3753
|
db.query(`DELETE FROM contact_groups WHERE contact_id = ? AND group_id = ?`).run(contactId, groupId);
|
package/dist/db/companies.d.ts
CHANGED
|
@@ -10,4 +10,6 @@ export declare function updateCompany(id: string, input: UpdateCompanyInput, db?
|
|
|
10
10
|
export declare function deleteCompany(id: string, db?: Database): void;
|
|
11
11
|
export declare function searchCompanies(query: string, db?: Database): CompanyWithDetails[];
|
|
12
12
|
export declare function listCompanyEmployees(companyId: string, db?: Database): Contact[];
|
|
13
|
+
export declare function archiveCompany(id: string, db?: Database): CompanyWithDetails;
|
|
14
|
+
export declare function unarchiveCompany(id: string, db?: Database): CompanyWithDetails;
|
|
13
15
|
//# sourceMappingURL=companies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companies.d.ts","sourceRoot":"","sources":["../../src/db/companies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAGV,kBAAkB,EAElB,kBAAkB,EAClB,OAAO,EAGP,kBAAkB,EASlB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"companies.d.ts","sourceRoot":"","sources":["../../src/db/companies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAGV,kBAAkB,EAElB,kBAAkB,EAClB,OAAO,EAGP,kBAAkB,EASlB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAsG3B,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAuC1F;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAKxE;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,kBAAuB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG;IAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA2C9H;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CA0BtG;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAQ7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAUlF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAgBhF;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAQ5E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAQ9E"}
|
package/dist/db/contacts.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
|
-
import type { ContactListOptions, ContactWithDetails, CreateContactInput, UpdateContactInput } from "../types/index.js";
|
|
2
|
+
import type { ContactListOptions, ContactWithDetails, CreateContactInput, CreateEmailInput, CreatePhoneInput, UpdateContactInput } from "../types/index.js";
|
|
3
3
|
export declare function createContact(input: CreateContactInput, db?: Database): ContactWithDetails;
|
|
4
4
|
export declare function getContact(id: string, db?: Database): ContactWithDetails;
|
|
5
5
|
export declare function listContacts(opts?: ContactListOptions, db?: Database): {
|
|
@@ -11,4 +11,10 @@ export declare function deleteContact(id: string, db?: Database): void;
|
|
|
11
11
|
export declare function searchContacts(query: string, db?: Database): ContactWithDetails[];
|
|
12
12
|
export declare function listRecentContacts(limit: number, db?: Database): ContactWithDetails[];
|
|
13
13
|
export declare function mergeContacts(keepId: string, mergeId: string, db?: Database): ContactWithDetails;
|
|
14
|
+
export declare function getContactByEmail(email: string, db?: Database): ContactWithDetails | null;
|
|
15
|
+
export declare function addEmailToContact(contactId: string, email: CreateEmailInput, db?: Database): ContactWithDetails;
|
|
16
|
+
export declare function addPhoneToContact(contactId: string, phone: CreatePhoneInput, db?: Database): ContactWithDetails;
|
|
17
|
+
export declare function archiveContact(id: string, db?: Database): ContactWithDetails;
|
|
18
|
+
export declare function unarchiveContact(id: string, db?: Database): ContactWithDetails;
|
|
19
|
+
export declare function autoLinkContactToCompany(contactId: string, db?: Database): ContactWithDetails | null;
|
|
14
20
|
//# sourceMappingURL=contacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/db/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAKV,kBAAkB,EAElB,kBAAkB,EAElB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/db/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAKV,kBAAkB,EAElB,kBAAkB,EAElB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAWhB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AA6H3B,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAoD1F;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAKxE;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,kBAAuB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgF5H;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAqDtG;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAS7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CA8CjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAMrF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAuEhG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAOzF;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAW/G;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAW/G;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAQ5E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAQ9E;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAcpG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,wBAAgB,SAAS,IAAI,MAAM,CAIlC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,wBAAgB,SAAS,IAAI,MAAM,CAIlC;AAyMD,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAUnD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B"}
|
package/dist/db/groups.d.ts
CHANGED
|
@@ -5,8 +5,18 @@ export declare function getGroup(db: Database, id: string): Group | null;
|
|
|
5
5
|
export declare function listGroups(db: Database): Group[];
|
|
6
6
|
export declare function updateGroup(db: Database, id: string, input: Partial<CreateGroupInput>): Group;
|
|
7
7
|
export declare function deleteGroup(db: Database, id: string): void;
|
|
8
|
-
export declare function addContactToGroup(db: Database, contactId: string, groupId: string):
|
|
8
|
+
export declare function addContactToGroup(db: Database, contactId: string, groupId: string): {
|
|
9
|
+
added: boolean;
|
|
10
|
+
already_member: boolean;
|
|
11
|
+
};
|
|
9
12
|
export declare function removeContactFromGroup(db: Database, contactId: string, groupId: string): void;
|
|
10
13
|
export declare function listContactsInGroup(db: Database, groupId: string): string[];
|
|
11
14
|
export declare function listGroupsForContact(db: Database, contactId: string): Group[];
|
|
15
|
+
export declare function addCompanyToGroup(db: Database, companyId: string, groupId: string): {
|
|
16
|
+
added: boolean;
|
|
17
|
+
already_member: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare function removeCompanyFromGroup(db: Database, companyId: string, groupId: string): void;
|
|
20
|
+
export declare function listCompaniesInGroup(db: Database, groupId: string): string[];
|
|
21
|
+
export declare function listGroupsForCompany(db: Database, companyId: string): Group[];
|
|
12
22
|
//# sourceMappingURL=groups.d.ts.map
|
package/dist/db/groups.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/db/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAKxE;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/db/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAKxE;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAE/D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,CAOhD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAS7F;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAK/H;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAG3E;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE,CAI7E;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAK/H;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5E;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE,CAI7E"}
|
package/dist/db/tags.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/db/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,GAAG,EAEH,cAAc,EACf,MAAM,mBAAmB,CAAC;AAY3B,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAYnE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAKrD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAIpE;AAED,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,CAG7C;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAuB/E;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAKzD;AAID,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAOrF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAG1F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/db/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,GAAG,EAEH,cAAc,EACf,MAAM,mBAAmB,CAAC;AAY3B,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAYnE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAKrD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAIpE;AAED,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,CAG7C;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAuB/E;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAKzD;AAID,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAOrF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAG1F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAsBzE;AAID,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAOrF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAG1F"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { getDatabase, resetDatabase } from "./db/database.js";
|
|
2
|
-
export { createContact, getContact, listContacts, updateContact, deleteContact, searchContacts, mergeContacts, listRecentContacts, } from "./db/contacts.js";
|
|
3
|
-
export { createCompany, getCompany, listCompanies, updateCompany, deleteCompany, searchCompanies, listCompanyEmployees, } from "./db/companies.js";
|
|
2
|
+
export { createContact, getContact, getContactByEmail, listContacts, updateContact, deleteContact, searchContacts, mergeContacts, listRecentContacts, addEmailToContact, addPhoneToContact, archiveContact, unarchiveContact, autoLinkContactToCompany, } from "./db/contacts.js";
|
|
3
|
+
export { createCompany, getCompany, listCompanies, updateCompany, deleteCompany, searchCompanies, listCompanyEmployees, archiveCompany, unarchiveCompany, } from "./db/companies.js";
|
|
4
4
|
export { createTag, getTag, getTagByName, listTags, updateTag, deleteTag, addTagToContact, removeTagFromContact, listContactsByTag, addTagToCompany, removeTagFromCompany, } from "./db/tags.js";
|
|
5
5
|
export { createRelationship, listRelationships, getRelationship, deleteRelationship, } from "./db/relationships.js";
|
|
6
|
-
export { createGroup, getGroup, listGroups, updateGroup, deleteGroup, addContactToGroup, removeContactFromGroup, listContactsInGroup, listGroupsForContact, } from "./db/groups.js";
|
|
6
|
+
export { createGroup, getGroup, listGroups, updateGroup, deleteGroup, addContactToGroup, removeContactFromGroup, listContactsInGroup, listGroupsForContact, addCompanyToGroup, removeCompanyFromGroup, listCompaniesInGroup, listGroupsForCompany, } from "./db/groups.js";
|
|
7
7
|
export { logActivity, listActivity, getActivity } from "./db/activity.js";
|
|
8
|
-
export type { EmailType, PhoneType, AddressType, SocialPlatform, RelationshipType, ContactSource, PreferredContactMethod, Email, Phone, Address, SocialProfile, Tag, Contact, ContactWithDetails, Company, CompanyWithDetails, ContactRelationship, ActivityLog, Webhook, Group, CreateGroupInput, CreateEmailInput, CreatePhoneInput, CreateAddressInput, CreateSocialProfileInput, CreateTagInput, UpdateTagInput, CreateContactInput, UpdateContactInput, ContactListOptions, CreateCompanyInput, UpdateCompanyInput, CompanyListOptions, CreateRelationshipInput, CreateActivityInput, CreateWebhookInput, UpdateWebhookInput, ContactRow, CompanyRow, EmailRow, PhoneRow, AddressRow, SocialProfileRow, TagRow, RelationshipRow, ActivityRow, WebhookRow, } from "./types/index.js";
|
|
8
|
+
export type { EmailType, PhoneType, AddressType, SocialPlatform, RelationshipType, ContactSource, PreferredContactMethod, ContactStatus, Email, Phone, Address, SocialProfile, Tag, Contact, ContactWithDetails, Company, CompanyWithDetails, ContactRelationship, ActivityLog, Webhook, Group, CreateGroupInput, CreateEmailInput, CreatePhoneInput, CreateAddressInput, CreateSocialProfileInput, CreateTagInput, UpdateTagInput, CreateContactInput, UpdateContactInput, ContactListOptions, CreateCompanyInput, UpdateCompanyInput, CompanyListOptions, CreateRelationshipInput, CreateActivityInput, CreateWebhookInput, UpdateWebhookInput, DuplicateByEmail, DuplicateByName, ContactRow, CompanyRow, EmailRow, PhoneRow, AddressRow, SocialProfileRow, TagRow, RelationshipRow, ActivityRow, WebhookRow, } from "./types/index.js";
|
|
9
9
|
export { ContactNotFoundError, CompanyNotFoundError, TagNotFoundError, DuplicateTagNameError, } from "./types/index.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,SAAS,EACT,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1E,YAAY,EAEV,SAAS,EACT,SAAS,EACT,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,aAAa,EAEb,KAAK,EACL,KAAK,EACL,OAAO,EACP,aAAa,EAEb,GAAG,EACH,OAAO,EACP,kBAAkB,EAClB,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,KAAK,EACL,gBAAgB,EAEhB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAEf,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|