@hasna/contacts 0.6.23 → 0.6.28

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 (103) hide show
  1. package/README.md +61 -3
  2. package/dist/cli/commands/advanced.d.ts.map +1 -1
  3. package/dist/cli/commands/audience.d.ts +18 -0
  4. package/dist/cli/commands/audience.d.ts.map +1 -0
  5. package/dist/cli/commands/core.d.ts.map +1 -1
  6. package/dist/cli/commands/crm.d.ts.map +1 -1
  7. package/dist/cli/index.js +8605 -5889
  8. package/dist/cli/storage.d.ts.map +1 -1
  9. package/dist/cloud/http-storage.d.ts +88 -0
  10. package/dist/cloud/http-storage.d.ts.map +1 -0
  11. package/dist/db/audiences.d.ts +51 -0
  12. package/dist/db/audiences.d.ts.map +1 -0
  13. package/dist/db/companies.d.ts.map +1 -1
  14. package/dist/db/contacts.d.ts.map +1 -1
  15. package/dist/db/database.d.ts +1 -2
  16. package/dist/db/database.d.ts.map +1 -1
  17. package/dist/db/paths.d.ts +3 -0
  18. package/dist/db/paths.d.ts.map +1 -0
  19. package/dist/db/pg-migrations.d.ts.map +1 -1
  20. package/dist/db/storage.d.ts +1 -1
  21. package/dist/db/storage.d.ts.map +1 -1
  22. package/dist/db/tags.d.ts.map +1 -1
  23. package/dist/db/tombstones.d.ts +19 -0
  24. package/dist/db/tombstones.d.ts.map +1 -0
  25. package/dist/generated/storage-kit/health.d.ts +20 -0
  26. package/dist/generated/storage-kit/health.d.ts.map +1 -0
  27. package/dist/generated/storage-kit/index.d.ts +8 -0
  28. package/dist/generated/storage-kit/index.d.ts.map +1 -0
  29. package/dist/generated/storage-kit/migrations.d.ts +48 -0
  30. package/dist/generated/storage-kit/migrations.d.ts.map +1 -0
  31. package/dist/generated/storage-kit/mode.d.ts +48 -0
  32. package/dist/generated/storage-kit/mode.d.ts.map +1 -0
  33. package/dist/generated/storage-kit/pool.d.ts +34 -0
  34. package/dist/generated/storage-kit/pool.d.ts.map +1 -0
  35. package/dist/generated/storage-kit/query.d.ts +36 -0
  36. package/dist/generated/storage-kit/query.d.ts.map +1 -0
  37. package/dist/generated/storage-kit/tls.d.ts +26 -0
  38. package/dist/generated/storage-kit/tls.d.ts.map +1 -0
  39. package/dist/index.d.ts +6 -79
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +4144 -4050
  42. package/dist/lib/audience-contract.d.ts +215 -0
  43. package/dist/lib/audience-contract.d.ts.map +1 -0
  44. package/dist/lib/mailery-sync.d.ts +46 -0
  45. package/dist/lib/mailery-sync.d.ts.map +1 -0
  46. package/dist/lib/package-version.d.ts +6 -0
  47. package/dist/lib/package-version.d.ts.map +1 -0
  48. package/dist/mcp/handlers/advanced.d.ts +5 -0
  49. package/dist/mcp/handlers/advanced.d.ts.map +1 -1
  50. package/dist/mcp/handlers/audience.d.ts +9 -0
  51. package/dist/mcp/handlers/audience.d.ts.map +1 -0
  52. package/dist/mcp/handlers/core.d.ts +4 -0
  53. package/dist/mcp/handlers/core.d.ts.map +1 -1
  54. package/dist/mcp/handlers/crm.d.ts +5 -0
  55. package/dist/mcp/handlers/crm.d.ts.map +1 -1
  56. package/dist/mcp/handlers/index.d.ts.map +1 -1
  57. package/dist/mcp/index.js +10963 -10178
  58. package/dist/mcp/storage-tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.d.ts +252 -0
  60. package/dist/mcp/tools.d.ts.map +1 -1
  61. package/dist/sdk/index.d.ts +16 -0
  62. package/dist/sdk/index.d.ts.map +1 -0
  63. package/dist/sdk/index.js +173 -0
  64. package/dist/sdk/v1.generated.d.ts +189 -0
  65. package/dist/sdk/v1.generated.d.ts.map +1 -0
  66. package/dist/server/cloud.d.ts +51 -0
  67. package/dist/server/cloud.d.ts.map +1 -0
  68. package/dist/server/index.js +23204 -20342
  69. package/dist/server/openapi.d.ts +708 -0
  70. package/dist/server/openapi.d.ts.map +1 -0
  71. package/dist/server/pg-store.d.ts +57 -0
  72. package/dist/server/pg-store.d.ts.map +1 -0
  73. package/dist/server/security.d.ts +24 -0
  74. package/dist/server/security.d.ts.map +1 -0
  75. package/dist/server/serve.d.ts +8 -1
  76. package/dist/server/serve.d.ts.map +1 -1
  77. package/dist/server/v1.d.ts +6 -0
  78. package/dist/server/v1.d.ts.map +1 -0
  79. package/dist/store/index.d.ts +383 -0
  80. package/dist/store/index.d.ts.map +1 -0
  81. package/dist/types/index.d.ts +96 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/hasna.contract.json +32 -0
  84. package/migrations/0001_core_schema.sql +162 -0
  85. package/migrations/0002_contact_fields_groups.sql +22 -0
  86. package/migrations/0003_status_archiving.sql +17 -0
  87. package/migrations/0004_company_relationships.sql +16 -0
  88. package/migrations/0005_contact_projects.sql +19 -0
  89. package/migrations/0006_contact_notes.sql +14 -0
  90. package/migrations/0007_entities_vendor_tasks.sql +91 -0
  91. package/migrations/0008_deals_events.sql +36 -0
  92. package/migrations/0009_history_learnings_coordination.sql +122 -0
  93. package/migrations/0010_documents_health.sql +38 -0
  94. package/migrations/0011_feedback.sql +14 -0
  95. package/migrations/0012_audiences_consent_suppressions.sql +38 -0
  96. package/migrations/9001_api_keys.sql +18 -0
  97. package/package.json +14 -3
  98. package/dist/db/feedback.d.ts +0 -15
  99. package/dist/db/feedback.d.ts.map +0 -1
  100. package/dist/db/remote-storage.d.ts +0 -14
  101. package/dist/db/remote-storage.d.ts.map +0 -1
  102. package/dist/db/remote-sync.d.ts +0 -49
  103. package/dist/db/remote-sync.d.ts.map +0 -1
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Pure-remote Postgres data access for `contacts-serve` `/v1` (Amendment A1).
3
+ *
4
+ * A real, typed wrapper over the shared cloud Postgres relational schema
5
+ * (see src/db/pg-migrations.ts). It exposes CRUD for the core contacts domain
6
+ * entities — contacts, companies, tags — reading and writing RDS directly via
7
+ * the vendored kit's pooled query client. There are NO stubs: every method runs
8
+ * a parameterized SQL statement against the live database.
9
+ */
10
+ import type { PoolQueryClient } from "../generated/storage-kit/query.js";
11
+ import type { Company, Contact, CreateCompanyInput, CreateContactInput, CreateTagInput, Tag, UpdateCompanyInput, UpdateContactInput, UpdateTagInput } from "../types/index.js";
12
+ export interface ContactListFilter {
13
+ limit?: number;
14
+ offset?: number;
15
+ company_id?: string;
16
+ status?: string;
17
+ q?: string;
18
+ }
19
+ export interface CompanyListFilter {
20
+ limit?: number;
21
+ offset?: number;
22
+ industry?: string;
23
+ }
24
+ export declare class ContactsPgStore {
25
+ private readonly client;
26
+ constructor(client: PoolQueryClient);
27
+ listContacts(filter?: ContactListFilter): Promise<{
28
+ contacts: Contact[];
29
+ count: number;
30
+ }>;
31
+ getContact(id: string): Promise<Contact | null>;
32
+ createContact(input: CreateContactInput): Promise<Contact>;
33
+ updateContact(id: string, input: UpdateContactInput): Promise<Contact | null>;
34
+ deleteContact(id: string): Promise<boolean>;
35
+ listCompanies(filter?: CompanyListFilter): Promise<{
36
+ companies: Company[];
37
+ count: number;
38
+ }>;
39
+ getCompany(id: string): Promise<Company | null>;
40
+ createCompany(input: CreateCompanyInput): Promise<Company>;
41
+ updateCompany(id: string, input: UpdateCompanyInput): Promise<Company | null>;
42
+ deleteCompany(id: string): Promise<boolean>;
43
+ listTags(): Promise<Tag[]>;
44
+ getTag(id: string): Promise<Tag | null>;
45
+ createTag(input: CreateTagInput): Promise<Tag>;
46
+ updateTag(id: string, input: UpdateTagInput): Promise<Tag | null>;
47
+ deleteTag(id: string): Promise<boolean>;
48
+ stats(): Promise<{
49
+ contacts: number;
50
+ companies: number;
51
+ tags: number;
52
+ }>;
53
+ }
54
+ export declare function createContactsPgStore(client: PoolQueryClient): ContactsPgStore;
55
+ export declare function getContactsPgStore(client: PoolQueryClient): ContactsPgStore;
56
+ export declare function resetContactsPgStore(): void;
57
+ //# sourceMappingURL=pg-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-store.d.ts","sourceRoot":"","sources":["../../src/server/pg-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,GAAG,EACH,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,mBAAmB,CAAC;AA0I3B,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAG9C,YAAY,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA8B7F,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK/C,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4C1D,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA2B7E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,aAAa,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB/F,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK/C,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1D,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAyB7E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAK1B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAKvC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAS9C,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAiBjE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMvC,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAa9E;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAG3E;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,24 @@
1
+ import type { ContactWithDetails } from "../types/index.js";
2
+ export declare const CONTACTS_AUTH_ENV: readonly ["HASNA_CONTACTS_API_TOKENS", "OPEN_CONTACTS_API_TOKENS", "CONTACTS_API_TOKENS", "HASNA_CONTACTS_API_TOKEN", "OPEN_CONTACTS_API_TOKEN", "CONTACTS_API_TOKEN"];
3
+ export type ContactsScope = "contacts:read" | "contacts:write" | "companies:read" | "companies:write" | "tags:read" | "tags:write" | "contacts:import" | "contacts:export" | "contacts:export:full" | "documents:read" | "images:read" | "images:write" | "mcp:access" | "dashboard:read" | "stats:read";
4
+ export interface ContactsPrincipal {
5
+ id: string;
6
+ scopes: Set<string>;
7
+ localDevelopment: boolean;
8
+ }
9
+ export interface ContactsAuthResult {
10
+ ok: boolean;
11
+ principal?: ContactsPrincipal;
12
+ status?: number;
13
+ message?: string;
14
+ }
15
+ export interface ContactsAuthContext {
16
+ allowUnauthenticatedLoopback: boolean;
17
+ }
18
+ export declare function allowUnauthenticatedLoopbackEnv(): boolean;
19
+ export declare function isLoopbackBindHost(hostname: string): boolean;
20
+ export declare function hasScope(principal: ContactsPrincipal, required: ContactsScope): boolean;
21
+ export declare function authenticateContactsRequest(req: Request, required: ContactsScope, context?: ContactsAuthContext): ContactsAuthResult;
22
+ export declare function auditServerAccess(action: string, details: Record<string, unknown>, principal?: ContactsPrincipal): void;
23
+ export declare function redactContactForExport(contact: ContactWithDetails): ContactWithDetails;
24
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/server/security.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,eAAO,MAAM,iBAAiB,wKAOpB,CAAC;AAEX,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,GACtB,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,YAAY,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,4BAA4B,EAAE,OAAO,CAAC;CACvC;AAyCD,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAGvF;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,mBAA6D,GACrE,kBAAkB,CAmBpB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,CAAC,EAAE,iBAAiB,GAC5B,IAAI,CAaN;AASD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAkBtF"}
@@ -1,2 +1,9 @@
1
- export declare function startServer(port: number): void;
1
+ export interface ContactsRequestHandlerOptions {
2
+ trustedLoopbackBind?: boolean;
3
+ }
4
+ export interface StartServerOptions {
5
+ hostname?: string;
6
+ }
7
+ export declare function createContactsRequestHandler(options?: ContactsRequestHandlerOptions): (req: Request) => Promise<Response>;
8
+ export declare function startServer(port: number, options?: StartServerOptions): void;
2
9
  //# sourceMappingURL=serve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AA6WA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmF9C"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA8aD,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,6BAAkC,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAsH7H;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI,CAUhF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Handle a `/v1/*` request. Returns `null` when the path is not a `/v1` route so
3
+ * the caller can fall through to other handlers.
4
+ */
5
+ export declare function handleV1Request(req: Request, url: URL): Promise<Response | null>;
6
+ //# sourceMappingURL=v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1.d.ts","sourceRoot":"","sources":["../../src/server/v1.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyJtF"}
@@ -0,0 +1,383 @@
1
+ import type { ContactsStorageStatus } from "../db/storage.js";
2
+ import * as contactsDb from "../db/contacts.js";
3
+ import * as companiesDb from "../db/companies.js";
4
+ import * as tagsDb from "../db/tags.js";
5
+ import * as groupsDb from "../db/groups.js";
6
+ import * as relationshipsDb from "../db/relationships.js";
7
+ import * as activityDb from "../db/activity.js";
8
+ import * as vendorCommsDb from "../db/vendor-comms.js";
9
+ import * as contactTasksDb from "../db/contact-tasks.js";
10
+ import * as applicationsDb from "../db/applications.js";
11
+ import * as orgMembersDb from "../db/org-members.js";
12
+ import * as dealsDb from "../db/deals.js";
13
+ import * as eventsDb from "../db/events.js";
14
+ import * as jobHistoryDb from "../db/job-history.js";
15
+ import * as learningsDb from "../db/learnings.js";
16
+ import * as identityDb from "../db/identity.js";
17
+ import * as freshnessDb from "../db/freshness.js";
18
+ import * as orgChartDb from "../db/org-chart.js";
19
+ import * as documentsDb from "../db/documents.js";
20
+ import * as healthDb from "../db/health.js";
21
+ import * as audiencesDb from "../db/audiences.js";
22
+ import * as statsLib from "../lib/stats.js";
23
+ import * as meetingCaptureLib from "../lib/meeting-capture.js";
24
+ import * as contextLib from "../lib/context.js";
25
+ import * as mailerySyncLib from "../lib/mailery-sync.js";
26
+ type CreateContactInput = Parameters<typeof contactsDb.createContact>[0];
27
+ type UpdateContactInput = Parameters<typeof contactsDb.updateContact>[1];
28
+ type ContactListOptions = Parameters<typeof contactsDb.listContacts>[0];
29
+ type ContactListResult = Awaited<ReturnType<typeof contactsDb.listContacts>>;
30
+ type Contact = ReturnType<typeof contactsDb.getContact>;
31
+ type CreateEmailInput = Parameters<typeof contactsDb.addEmailToContact>[1];
32
+ type CreatePhoneInput = Parameters<typeof contactsDb.addPhoneToContact>[1];
33
+ type CreateCompanyInput = Parameters<typeof companiesDb.createCompany>[0];
34
+ type UpdateCompanyInput = Parameters<typeof companiesDb.updateCompany>[1];
35
+ type CompanyListOptions = Parameters<typeof companiesDb.listCompanies>[0];
36
+ type CompanyListResult = Awaited<ReturnType<typeof companiesDb.listCompanies>>;
37
+ type CreateTagInput = Parameters<typeof tagsDb.createTag>[0];
38
+ type CreateGroupInput = Parameters<typeof groupsDb.createGroup>[1];
39
+ type UpdateGroupInput = Parameters<typeof groupsDb.updateGroup>[2];
40
+ type CreateRelationshipInput = Parameters<typeof relationshipsDb.createRelationship>[0];
41
+ type ListRelationshipsOptions = Parameters<typeof relationshipsDb.listRelationships>[0];
42
+ type CreateCompanyRelationshipInput = Parameters<typeof relationshipsDb.createCompanyRelationship>[0];
43
+ type ListCompanyRelationshipsOptions = Parameters<typeof relationshipsDb.listCompanyRelationships>[0];
44
+ type ListActivityOptions = Parameters<typeof activityDb.listActivity>[0];
45
+ export interface ContactsStats {
46
+ contacts: number;
47
+ companies: number;
48
+ tags: number;
49
+ groups: number;
50
+ }
51
+ /** Thrown when an operation is requested in api (self_hosted/cloud) mode but the
52
+ * `/v1` server does not expose it yet. Never silently falls back to local. */
53
+ export declare class ApiUnavailableError extends Error {
54
+ constructor(operation: string);
55
+ }
56
+ /**
57
+ * The single storage contract. Every method is async so LocalStore (sync SQLite)
58
+ * and ApiStore (async HTTP) share one shape. Callers never branch on transport.
59
+ */
60
+ export interface Store {
61
+ readonly mode: "local" | "api";
62
+ createContact(input: CreateContactInput): Promise<Contact>;
63
+ getContact(id: string): Promise<Contact | null>;
64
+ getContactByEmail(email: string): Promise<Contact | null>;
65
+ updateContact(id: string, input: UpdateContactInput): Promise<Contact>;
66
+ deleteContact(id: string): Promise<void>;
67
+ listContacts(opts?: ContactListOptions): Promise<ContactListResult>;
68
+ searchContacts(query: string): Promise<Contact[]>;
69
+ listRecentContacts(limit: number): Promise<Contact[]>;
70
+ mergeContacts(keepId: string, mergeId: string): Promise<Contact>;
71
+ addEmailToContact(contactId: string, email: CreateEmailInput): Promise<unknown>;
72
+ addPhoneToContact(contactId: string, phone: CreatePhoneInput): Promise<unknown>;
73
+ archiveContact(id: string): Promise<Contact>;
74
+ unarchiveContact(id: string): Promise<Contact>;
75
+ autoLinkContactToCompany(contactId: string): Promise<Contact | null>;
76
+ /** Local-only helper for find-or-create/upsert flows: resolves an existing
77
+ * contact by one of its email addresses (case-insensitive by default). */
78
+ findContactByEmailAddress(address: string, opts?: {
79
+ caseSensitive?: boolean;
80
+ }): Promise<Contact | null>;
81
+ linkContactToProject(contactId: string, projectId: string): Promise<void>;
82
+ unlinkContactFromProject(contactId: string, projectId: string): Promise<void>;
83
+ getContactProjectIds(contactId: string): Promise<string[]>;
84
+ setContactProjects(contactId: string, projectIds: string[]): Promise<void>;
85
+ listContactIdsByProject(projectId: string): Promise<string[]>;
86
+ createCompany(input: CreateCompanyInput): Promise<unknown>;
87
+ getCompany(id: string): Promise<unknown | null>;
88
+ updateCompany(id: string, input: UpdateCompanyInput): Promise<unknown>;
89
+ deleteCompany(id: string): Promise<void>;
90
+ listCompanies(opts?: CompanyListOptions): Promise<CompanyListResult>;
91
+ searchCompanies(query: string): Promise<unknown[]>;
92
+ archiveCompany(id: string): Promise<unknown>;
93
+ unarchiveCompany(id: string): Promise<unknown>;
94
+ createTag(input: CreateTagInput): Promise<unknown>;
95
+ listTags(): Promise<unknown[]>;
96
+ getTagByName(name: string): Promise<unknown | null>;
97
+ deleteTag(id: string): Promise<void>;
98
+ addTagToContact(contactId: string, tagId: string): Promise<void>;
99
+ removeTagFromContact(contactId: string, tagId: string): Promise<void>;
100
+ addTagToCompany(companyId: string, tagId: string): Promise<void>;
101
+ removeTagFromCompany(companyId: string, tagId: string): Promise<void>;
102
+ createGroup(input: CreateGroupInput): Promise<unknown>;
103
+ getGroup(id: string): Promise<unknown | null>;
104
+ listGroups(projectId?: string): Promise<unknown[]>;
105
+ updateGroup(id: string, input: UpdateGroupInput): Promise<unknown>;
106
+ deleteGroup(id: string): Promise<void>;
107
+ addContactToGroup(contactId: string, groupId: string): Promise<unknown>;
108
+ removeContactFromGroup(contactId: string, groupId: string): Promise<void>;
109
+ listContactsInGroup(groupId: string): Promise<string[]>;
110
+ listGroupsForContact(contactId: string): Promise<unknown[]>;
111
+ addCompanyToGroup(companyId: string, groupId: string): Promise<unknown>;
112
+ removeCompanyFromGroup(companyId: string, groupId: string): Promise<void>;
113
+ listCompaniesInGroup(groupId: string): Promise<string[]>;
114
+ listGroupsForCompany(companyId: string): Promise<unknown[]>;
115
+ createRelationship(input: CreateRelationshipInput): Promise<unknown>;
116
+ listRelationships(opts?: ListRelationshipsOptions): Promise<unknown[]>;
117
+ deleteRelationship(id: string): Promise<void>;
118
+ createCompanyRelationship(input: CreateCompanyRelationshipInput): Promise<unknown>;
119
+ listCompanyRelationships(opts?: ListCompanyRelationshipsOptions): Promise<unknown[]>;
120
+ deleteCompanyRelationship(id: string): Promise<void>;
121
+ addNote(contactId: string, body: string, createdBy?: string, companyId?: string): Promise<unknown>;
122
+ listNotes(contactId: string): Promise<unknown[]>;
123
+ listNotesForContactAtCompany(contactId: string, companyId: string): Promise<unknown[]>;
124
+ deleteNote(noteId: string): Promise<void>;
125
+ listActivity(opts?: ListActivityOptions): Promise<unknown>;
126
+ stats(): Promise<ContactsStats>;
127
+ findEmailDuplicates(): Promise<Array<{
128
+ email: string;
129
+ contact_ids: string[];
130
+ }>>;
131
+ findNameDuplicates(): Promise<Array<{
132
+ contact_ids: [string, string];
133
+ similarity: number;
134
+ }>>;
135
+ /** Local-only: checkpoint + release the SQLite handle before a file backup. */
136
+ flushForBackup(): Promise<void>;
137
+ listColdContacts(days: number): Promise<unknown[]>;
138
+ findOrCreateContact(input: CreateContactInput): Promise<{
139
+ contact: Contact;
140
+ created: boolean;
141
+ }>;
142
+ findContactsForContext(topic: string, limit: number): Promise<Array<{
143
+ id: string;
144
+ display_name: string;
145
+ job_title: string | null;
146
+ reason: string;
147
+ }>>;
148
+ listContactsNotContactedSince(days: number, limit: number): Promise<Array<{
149
+ id: string;
150
+ display_name: string;
151
+ last_contacted_at: string | null;
152
+ }>>;
153
+ listFollowupDueContacts(onOrBefore: string): Promise<Array<{
154
+ id: string;
155
+ display_name: string;
156
+ follow_up_at: string;
157
+ }>>;
158
+ logVendorCommunication(input: Parameters<typeof vendorCommsDb.logVendorCommunication>[0]): Promise<unknown>;
159
+ listVendorCommunications(companyId: string, opts?: Parameters<typeof vendorCommsDb.listVendorCommunications>[1]): Promise<unknown[]>;
160
+ listMissingInvoices(): Promise<unknown[]>;
161
+ listPendingFollowUps(): Promise<unknown[]>;
162
+ markFollowUpDone(id: string): Promise<unknown>;
163
+ createContactTask(input: Parameters<typeof contactTasksDb.createContactTask>[0]): Promise<unknown>;
164
+ listContactTasks(opts?: Parameters<typeof contactTasksDb.listContactTasks>[0]): Promise<unknown[]>;
165
+ updateContactTask(id: string, input: Parameters<typeof contactTasksDb.updateContactTask>[1]): Promise<unknown>;
166
+ deleteContactTask(id: string): Promise<void>;
167
+ listOverdueTasks(): Promise<unknown[]>;
168
+ checkEscalations(): Promise<unknown[]>;
169
+ createApplication(input: Parameters<typeof applicationsDb.createApplication>[0]): Promise<unknown>;
170
+ listApplications(opts?: Parameters<typeof applicationsDb.listApplications>[0]): Promise<unknown[]>;
171
+ updateApplication(id: string, input: Parameters<typeof applicationsDb.updateApplication>[1]): Promise<unknown>;
172
+ listFollowUpDueApplications(): Promise<unknown[]>;
173
+ addOrgMember(input: Parameters<typeof orgMembersDb.addOrgMember>[0]): Promise<unknown>;
174
+ listOrgMembers(companyId: string): Promise<unknown[]>;
175
+ updateOrgMember(id: string, input: Parameters<typeof orgMembersDb.updateOrgMember>[1]): Promise<unknown>;
176
+ removeOrgMember(id: string): Promise<void>;
177
+ listOrgMembersForContact(contactId: string): Promise<unknown[]>;
178
+ createDeal(input: Parameters<typeof dealsDb.createDeal>[0]): Promise<unknown>;
179
+ getDeal(id: string): Promise<unknown | null>;
180
+ listDeals(opts?: Parameters<typeof dealsDb.listDeals>[0]): Promise<unknown[]>;
181
+ updateDeal(id: string, input: Parameters<typeof dealsDb.updateDeal>[1]): Promise<unknown | null>;
182
+ deleteDeal(id: string): Promise<void>;
183
+ logEvent(input: Parameters<typeof eventsDb.logEvent>[0]): Promise<unknown>;
184
+ listEvents(opts?: Parameters<typeof eventsDb.listEvents>[0]): Promise<unknown[]>;
185
+ deleteEvent(id: string): Promise<void>;
186
+ getFieldHistory(contactId: string, fieldName?: string): Promise<unknown[]>;
187
+ getContactAt(contactId: string, timestamp: string): Promise<Record<string, string>>;
188
+ addJobEntry(contactId: string, input: Parameters<typeof jobHistoryDb.addJobEntry>[1]): Promise<unknown>;
189
+ getJobHistory(contactId: string): Promise<unknown[]>;
190
+ saveLearning(contactId: string, input: Parameters<typeof learningsDb.saveLearning>[1]): Promise<unknown>;
191
+ getLearnings(contactId: string, opts?: Parameters<typeof learningsDb.getLearnings>[1]): Promise<Array<{
192
+ confidence: number;
193
+ type: string;
194
+ content: string;
195
+ }>>;
196
+ searchLearnings(query: string, opts?: Parameters<typeof learningsDb.searchLearnings>[1]): Promise<Array<{
197
+ contact_id: string;
198
+ type: string;
199
+ confidence: number;
200
+ content: string;
201
+ }>>;
202
+ confirmLearning(learningId: string, agentName: string): Promise<void>;
203
+ getStaleLearnings(daysOld: number, minConfidence: number): Promise<unknown[]>;
204
+ runLearningMaintenance(): Promise<{
205
+ decayed_count: number;
206
+ potential_contradictions: unknown[];
207
+ }>;
208
+ acquireContactLock(contactId: string, agentName: string, ttlSeconds?: number, reason?: string, sessionId?: string): Promise<unknown>;
209
+ releaseContactLock(contactId: string, agentName: string): Promise<boolean>;
210
+ checkContactLock(contactId: string): Promise<unknown | null>;
211
+ logAgentActivity(contactId: string, agentName: string, action: string, details?: string, sessionId?: string): Promise<void>;
212
+ getAgentActivity(contactId: string, limit: number): Promise<unknown[]>;
213
+ computeRelationshipStrength(contactId: string): Promise<number>;
214
+ findWarmPath(fromContactId: string, toContactId: string): Promise<unknown[]>;
215
+ findConnectionsAtCompany(companyId: string): Promise<unknown[]>;
216
+ detectCoolingRelationships(): Promise<Array<{
217
+ display_name: string;
218
+ days_since: number;
219
+ }>>;
220
+ resolveContactIdentity(partial: Parameters<typeof identityDb.resolveByPartial>[0]): Promise<Array<{
221
+ contact: {
222
+ display_name: string;
223
+ job_title?: string;
224
+ };
225
+ confidence_score: number;
226
+ match_reasons: string[];
227
+ }>>;
228
+ addContactIdentity(contactId: string, system: string, externalId: string, externalUrl?: string, confidence?: "verified" | "inferred"): Promise<unknown>;
229
+ getContactIdentities(contactId: string): Promise<unknown[]>;
230
+ semanticSearch(query: string, limit: number): Promise<Array<{
231
+ contact_id: string;
232
+ score: number;
233
+ }>>;
234
+ embedContact(contactId: string): Promise<void>;
235
+ embedAllContacts(): Promise<number>;
236
+ getRelationshipSignals(contactId: string): Promise<Array<{
237
+ signal_type: string;
238
+ reason: string;
239
+ days_since_contact: number | null;
240
+ }>>;
241
+ getGhostContacts(): Promise<Array<{
242
+ display_name: string;
243
+ days_since_contact: number | null;
244
+ }>>;
245
+ getWarmingContacts(): Promise<Array<{
246
+ display_name: string;
247
+ days_since_contact: number | null;
248
+ }>>;
249
+ recomputeSignals(): Promise<{
250
+ updated: number;
251
+ }>;
252
+ getFreshnessScore(contactId: string): Promise<ReturnType<typeof freshnessDb.getFreshnessScore>>;
253
+ getStaleContacts(threshold: number): Promise<Array<{
254
+ contact_id: string;
255
+ display_name: string;
256
+ score: number;
257
+ }>>;
258
+ markFieldVerified(contactId: string, fieldName: string, source?: string): Promise<void>;
259
+ addOrgChartEdge(companyId: string, contactAId: string, contactBId: string, edgeType: Parameters<typeof orgChartDb.addOrgChartEdge>[3], inferred?: boolean): Promise<unknown>;
260
+ listOrgChart(companyId: string): Promise<Array<{
261
+ contact_a_name: string;
262
+ contact_b_name: string;
263
+ edge_type: string;
264
+ }>>;
265
+ setDealContactRole(dealId: string, contactId: string, accountRole: Parameters<typeof orgChartDb.setDealContactRole>[2]): Promise<unknown>;
266
+ getDealTeam(dealId: string): Promise<Array<{
267
+ display_name: string;
268
+ account_role: string;
269
+ job_title?: string;
270
+ }>>;
271
+ getCoverageGaps(companyId: string): Promise<unknown>;
272
+ getRecentContactEvents(since?: string, eventTypes?: string[]): Promise<unknown[]>;
273
+ addDocument(input: Parameters<typeof documentsDb.addDocument>[0]): Promise<unknown>;
274
+ getDocument(id: string): Promise<unknown>;
275
+ listDocuments(contactId: string): Promise<Array<{
276
+ doc_type: string;
277
+ label?: string | null;
278
+ has_file: boolean;
279
+ expires_at?: string | null;
280
+ created_at: string;
281
+ }>>;
282
+ deleteDocument(id: string): Promise<void>;
283
+ getDocumentFilePath(id: string): Promise<string | null>;
284
+ setHealthData(contactId: string, input: Parameters<typeof healthDb.setHealthData>[1]): Promise<unknown>;
285
+ getHealthData(contactId: string): Promise<ReturnType<typeof healthDb.getHealthData>>;
286
+ deleteHealthData(contactId: string): Promise<void>;
287
+ createAudience(input: Parameters<typeof audiencesDb.createAudience>[0]): Promise<{
288
+ id: string;
289
+ audience_id: string;
290
+ }>;
291
+ getAudience(idOrSlug: string): Promise<ReturnType<typeof audiencesDb.getAudience>>;
292
+ listAudiences(): Promise<Array<{
293
+ audience_id: string;
294
+ name: string;
295
+ match: string;
296
+ consent_policy: string;
297
+ predicates: unknown[];
298
+ suppression_synced_at?: string | null;
299
+ }>>;
300
+ updateAudience(idOrSlug: string, input: Parameters<typeof audiencesDb.updateAudience>[1]): Promise<unknown>;
301
+ deleteAudience(idOrSlug: string): Promise<void>;
302
+ resolveAudience(idOrSlug: string, channel: Parameters<typeof audiencesDb.resolveAudience>[1]): Promise<ReturnType<typeof audiencesDb.resolveAudience>>;
303
+ setContactConsent(contactId: string, channel: Parameters<typeof audiencesDb.setContactConsent>[1], status: Parameters<typeof audiencesDb.setContactConsent>[2], source?: string): Promise<{
304
+ channel: string;
305
+ status: string;
306
+ }>;
307
+ listContactConsent(contactId: string): Promise<Array<{
308
+ channel: string;
309
+ status: string;
310
+ source?: string | null;
311
+ updated_at: string;
312
+ }>>;
313
+ suppressAddress(input: Parameters<typeof audiencesDb.suppressAddress>[0]): Promise<{
314
+ address: string;
315
+ channel: string;
316
+ }>;
317
+ unsuppressAddress(channel: Parameters<typeof audiencesDb.unsuppressAddress>[0], address: string): Promise<void>;
318
+ listSuppressions(opts?: Parameters<typeof audiencesDb.listSuppressions>[0]): Promise<Array<{
319
+ address: string;
320
+ channel: string;
321
+ reason?: string | null;
322
+ synced_at?: string | null;
323
+ }>>;
324
+ syncSuppressions(dryRun?: boolean): Promise<Awaited<ReturnType<typeof mailerySyncLib.syncSuppressions>>>;
325
+ generateBrief(contactId: string): Promise<string>;
326
+ getContactCard(contactId: string): Promise<object>;
327
+ getContactBrief(contactId: string, taskContext?: string): Promise<object>;
328
+ assembleContext(contactIds: string[], format: Parameters<typeof contextLib.assembleContext>[1]): Promise<object>;
329
+ getUpcomingItems(days: number): Promise<unknown[]>;
330
+ getNetworkStats(): Promise<ReturnType<typeof statsLib.getNetworkStats>>;
331
+ listContactAudit(): Promise<unknown[]>;
332
+ getContactTimeline(contactId: string, limit: number): Promise<Array<{
333
+ type: string;
334
+ date?: string | null;
335
+ title: string;
336
+ body?: string | null;
337
+ }>>;
338
+ ingestMeetingParticipants(input: Parameters<typeof meetingCaptureLib.ingestMeetingParticipants>[0]): Promise<{
339
+ created: number;
340
+ updated: number;
341
+ contact_ids: string[];
342
+ }>;
343
+ saveImage(entityId: string, source: string, options?: {
344
+ format?: string;
345
+ }): Promise<string>;
346
+ getImagePath(entityId: string): Promise<string | null>;
347
+ getImageAsBase64(entityId: string): Promise<string | null>;
348
+ deleteImage(entityId: string): Promise<boolean>;
349
+ listImages(): Promise<Array<{
350
+ entity_id: string;
351
+ filename: string;
352
+ path: string;
353
+ }>>;
354
+ initVault(passphrase: string): Promise<void>;
355
+ unlockVault(passphrase: string): Promise<boolean>;
356
+ lockVault(): Promise<void>;
357
+ isVaultInitialized(): Promise<boolean>;
358
+ isVaultUnlocked(): Promise<boolean>;
359
+ vaultStatus(): Promise<{
360
+ initialized: boolean;
361
+ unlocked: boolean;
362
+ document_count: number;
363
+ }>;
364
+ saveFeedback(message: string, email: string | null, category: string, version: string): Promise<void>;
365
+ storageStatus(): Promise<ContactsStorageStatus | null>;
366
+ listActiveWebhooks(): Promise<Array<{
367
+ id: string;
368
+ event_type: string;
369
+ url: string;
370
+ secret?: string | null;
371
+ }>>;
372
+ }
373
+ /**
374
+ * Resolve the single Store for this process. Memoized. Returns an ApiStore when
375
+ * the self_hosted/cloud client-flip env is set (URL + key), else a LocalStore.
376
+ * Throws if cloud was requested but is misconfigured — callers never silently
377
+ * read/write the wrong dataset.
378
+ */
379
+ export declare function getStore(env?: Record<string, string | undefined>): Store;
380
+ /** Test hook: drop the memoized Store so a new env can be resolved. */
381
+ export declare function resetStoreCache(): void;
382
+ export type { ContactsStorageStatus, StorageTableStatus } from "../db/storage.js";
383
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"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"}
@@ -757,4 +757,100 @@ export declare class TagNotFoundError extends Error {
757
757
  export declare class DuplicateTagNameError extends Error {
758
758
  constructor(name: string);
759
759
  }
760
+ export declare const AUDIENCE_CHANNELS: readonly ["email", "telegram", "sms"];
761
+ export type AudienceChannel = (typeof AUDIENCE_CHANNELS)[number];
762
+ export declare const CONSENT_STATUSES: readonly ["opt_in", "opt_out", "unknown"];
763
+ export type ConsentStatus = (typeof CONSENT_STATUSES)[number];
764
+ export declare const CONSENT_POLICIES: readonly ["opt_in", "opt_out", "transactional", "none"];
765
+ export type ConsentPolicy = (typeof CONSENT_POLICIES)[number];
766
+ export type AudienceMatch = "all" | "any";
767
+ export type AudiencePredicateKind = "tag" | "attribute" | "group";
768
+ export type AudiencePredicateOp = "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
769
+ export type AudiencePredicateValue = string | number | boolean;
770
+ export interface AudiencePredicate {
771
+ kind: AudiencePredicateKind;
772
+ /** Attribute key (required for attribute predicates), e.g. `job_title` or a custom field name. */
773
+ key?: string;
774
+ op?: AudiencePredicateOp;
775
+ value?: AudiencePredicateValue;
776
+ values?: AudiencePredicateValue[];
777
+ }
778
+ export interface Audience {
779
+ id: string;
780
+ audience_id: string;
781
+ name: string;
782
+ match: AudienceMatch;
783
+ predicates: AudiencePredicate[];
784
+ consent_policy: ConsentPolicy;
785
+ suppression_synced_at: string | null;
786
+ created_at: string;
787
+ updated_at: string;
788
+ }
789
+ export interface AudienceRow {
790
+ id: string;
791
+ audience_id: string;
792
+ name: string;
793
+ match: AudienceMatch;
794
+ predicates: string;
795
+ consent_policy: ConsentPolicy;
796
+ suppression_synced_at: string | null;
797
+ created_at: string;
798
+ updated_at: string;
799
+ }
800
+ export interface CreateAudienceInput {
801
+ audience_id: string;
802
+ name: string;
803
+ match?: AudienceMatch;
804
+ predicates: AudiencePredicate[];
805
+ consent_policy?: ConsentPolicy;
806
+ }
807
+ export interface UpdateAudienceInput {
808
+ name?: string;
809
+ match?: AudienceMatch;
810
+ predicates?: AudiencePredicate[];
811
+ consent_policy?: ConsentPolicy;
812
+ }
813
+ export interface ContactConsent {
814
+ contact_id: string;
815
+ channel: AudienceChannel;
816
+ status: ConsentStatus;
817
+ source: string | null;
818
+ updated_at: string;
819
+ }
820
+ export interface ContactSuppression {
821
+ id: string;
822
+ contact_id: string | null;
823
+ channel: AudienceChannel;
824
+ address: string;
825
+ reason: string | null;
826
+ created_at: string;
827
+ synced_at: string | null;
828
+ }
829
+ export interface AudienceRecipient {
830
+ contact_id: string;
831
+ display_name: string;
832
+ address: string;
833
+ consent_status: ConsentStatus;
834
+ }
835
+ export interface AudienceExclusion {
836
+ contact_id: string;
837
+ reason: "consent" | "suppressed" | "do_not_contact" | "no_address" | "archived";
838
+ }
839
+ export interface AudienceResolution {
840
+ audience_id: string;
841
+ channel: AudienceChannel;
842
+ consent_policy: ConsentPolicy;
843
+ matched: number;
844
+ recipients: AudienceRecipient[];
845
+ excluded: AudienceExclusion[];
846
+ }
847
+ export declare class AudienceNotFoundError extends Error {
848
+ constructor(id: string);
849
+ }
850
+ export declare class DuplicateAudienceIdError extends Error {
851
+ constructor(audienceId: string);
852
+ }
853
+ export declare class InvalidAudienceDefinitionError extends Error {
854
+ constructor(detail: string);
855
+ }
760
856
  //# sourceMappingURL=index.d.ts.map